如何分组列并计算其他列的总数,同时排除NaN?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何分组列并计算其他列的总数,同时排除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
计算除NaN
s和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)
然后使用数据透视表创建新的数据框和计数值
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
以上是关于如何分组列并计算其他列的总数,同时排除NaN?的主要内容,如果未能解决你的问题,请参考以下文章