大熊猫按每个类别计算计数和总和组

时间:2016-07-26 02:55:39

标签: python pandas

我有一个数据框:

    category    num1    num2    mark
1   A   2   2   0
2   B   3   3   1
3   C   4   2   2
4   C   3   5   2
5   D   6   8   0
6   E   7   5   1
7   D   8   1   1

我想按标记(作为列)计算每个类别组的计数,例如:

the counts:         

   catgory  mark_0  mark_1  mark_2
   A    1   0   0
   B    0   1   0
   C    0   0   2
   D    0   2   0
   E    0   1   0

另一个是通过标记(作为列)计算每个类别组的数量之和,如:

the sum:            
    category numsum_0   numsum_1    numsum_2
       A    2   0   0
       B    0   3   0
       C    0   0   7
       D    0   14  0
       E    0   7   0

我的方法是:

df_z[df_z['mark']==0]['category'].value_counts()
df_z[df_z['mark']==0].groupby(['category'], sort=False).sum()

但效率低下

2 个答案:

答案 0 :(得分:3)

>>> pd.pivot_table(df,index=['category'],columns=['mark'],aggfunc=len).fillna(0)
          num
mark        0    1    2
category
A         1.0  0.0  0.0
B         0.0  1.0  0.0
C         0.0  0.0  2.0
D         1.0  1.0  0.0
E         0.0  1.0  0.0

>>> pd.pivot_table(df,index=['category'],columns=['mark'],aggfunc=np.sum).fillna(0)
          num
mark        0    1    2
category
A         2.0  0.0  0.0
B         0.0  3.0  0.0
C         0.0  0.0  7.0
D         6.0  8.0  0.0
E         0.0  7.0  0.0

答案 1 :(得分:2)

使用agg

idx_cols = ['category', 'mark']
agg_dict = {'num1': {'Sum': 'sum'}, 'num2': {'Count': 'count'}}

df.set_index(idx_cols).groupby(level=[0, 1]).agg(agg_dict).unstack()

enter image description here