Python 熊猫按每个类别计算计数和总和组
我有一个数据帧:Python 熊猫按每个类别计算计数和总和组,python,pandas,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 我想通过标记(作为列)计算每个类别组的计数,如: 另一种方法是通过标记(作为列)计算每个类别组的数字总和,如下所示: 我的方法是: df_z[df_z['
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
我想通过标记(作为列)计算每个类别组的计数,如:
另一种方法是通过标记(作为列)计算每个类别组的数字总和,如下所示:
我的方法是:
df_z[df_z['mark']==0]['category'].value_counts()
df_z[df_z['mark']==0].groupby(['category'], sort=False).sum()
但是它是低效的使用agg
>>> 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
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()
我们可以将“nan”改为0吗?如果这里有两个num列:num1和num2,我们可以通过指定的num1或num2计算总和吗?直到您可以提供一个函数列表作为
aggfunc
kwarg,例如pd.pivot\u表(df,index=['category'],columns=['mark'],aggfunc=[len,np.sum])。fillna(0)
。
>>> 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
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()