如何对一列进行分组并计算除NaN以外的其他列的总数?

时间:2019-04-20 10:41:26

标签: python pandas count pandas-groupby nan

router-view

enter image description here

如何在不使用Python的NaN的同时对一列进行分组并计算其他列的总数?

2 个答案:

答案 0 :(得分:1)

使用GroupBy.count表示不包含NaN的计数值,并通过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

答案 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]})

您还可以结合使用melt和pivot_table函数,分两步执行此操作: 使用melt函数重新格式化数据框的形状

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