如何在排除 NaN 的同时对一列进行分组并计算其他列的总数?
How to groupby a column and count total numbers of other columns while excluding NaN?
df = pd.DataFrame(
{'ST': list('AABBBC'),
'NO': [5.3, 1.2, np.nan, 2.3, 4.2, 1.5],
'CO':[3.4,np.nan, 4.1, 2.5,np.nan, 3.6]})
print (df)
ST NO CO
0 A 5.3 3.4
1 A 1.2 NaN
2 B NaN 4.1
3 B 2.3 2.5
4 B 4.2 NaN
5 C 1.5 3.6
如何在 Python 中排除 NaN 的同时对列进行分组并计算其他列的总数?
使用 GroupBy.count
for count values excluding NaN
s and reshape by DataFrame.stack
- 输出为 MultiIndex Series
:
s = df.groupby('ST').count().stack()
print (s)
ST
A NO 2
CO 1
B NO 2
CO 2
C NO 1
CO 1
dtype: int64
如果需要DataFrame
:
df1 = df.groupby('ST').count().stack().rename_axis(('ST','NEW')).reset_index(name='VAL')
print (df1)
ST NEW VAL
0 A NO 2
1 A CO 1
2 B NO 2
3 B CO 2
4 C NO 1
5 C CO 1
df = pd.DataFrame(
{'ST': list('AABBBC'),
'NO': [5.3, 1.2, np.nan, 2.3, 4.2, 1.5],
'CO':[3.4,np.nan, 4.1, 2.5,np.nan, 3.6]})
您也可以结合使用熔化和 pivot_table 函数分两步完成此操作:
使用熔化函数重新格式化数据框的形状
cols=['NO','CO']
df_melt=pd.melt(df,id_vars=['ST'],value_vars=cols)
然后使用数据透视表table创建一个新的数据框并计算值
df_pivot=pd.pivot_table(df_melt,index=['ST','variable'],values='value',aggfunc='count').reset_index()
Result:
ST variable value
0 A CO 1
1 A NO 2
2 B CO 2
3 B NO 2
4 C CO 1
5 C NO 1
df = pd.DataFrame(
{'ST': list('AABBBC'),
'NO': [5.3, 1.2, np.nan, 2.3, 4.2, 1.5],
'CO':[3.4,np.nan, 4.1, 2.5,np.nan, 3.6]})
print (df)
ST NO CO
0 A 5.3 3.4
1 A 1.2 NaN
2 B NaN 4.1
3 B 2.3 2.5
4 B 4.2 NaN
5 C 1.5 3.6
如何在 Python 中排除 NaN 的同时对列进行分组并计算其他列的总数?
使用 GroupBy.count
for count values excluding NaN
s and reshape by DataFrame.stack
- 输出为 MultiIndex Series
:
s = df.groupby('ST').count().stack()
print (s)
ST
A NO 2
CO 1
B NO 2
CO 2
C NO 1
CO 1
dtype: int64
如果需要DataFrame
:
df1 = df.groupby('ST').count().stack().rename_axis(('ST','NEW')).reset_index(name='VAL')
print (df1)
ST NEW VAL
0 A NO 2
1 A CO 1
2 B NO 2
3 B CO 2
4 C NO 1
5 C CO 1
df = pd.DataFrame(
{'ST': list('AABBBC'),
'NO': [5.3, 1.2, np.nan, 2.3, 4.2, 1.5],
'CO':[3.4,np.nan, 4.1, 2.5,np.nan, 3.6]})
您也可以结合使用熔化和 pivot_table 函数分两步完成此操作: 使用熔化函数重新格式化数据框的形状
cols=['NO','CO']
df_melt=pd.melt(df,id_vars=['ST'],value_vars=cols)
然后使用数据透视表table创建一个新的数据框并计算值
df_pivot=pd.pivot_table(df_melt,index=['ST','variable'],values='value',aggfunc='count').reset_index()
Result:
ST variable value
0 A CO 1
1 A NO 2
2 B CO 2
3 B NO 2
4 C CO 1
5 C NO 1