如何分组列并计算其他列的总数,同时排除NaN?

问题描述 投票:0回答:2
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

enter image description here

如何组合列并计算其他列的总数,同时在Python中排除NaN?

python pandas count pandas-groupby nan
2个回答
1
投票

使用GroupBy.count计算除NaNs和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

0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.