假设我已经通过
创建了一个数据框df=pd.DataFrame({
'A':pd.Series(['aa','aa','bb','bb']),
'B':pd.Series(['xx','yy','zz','zz']), 'C':pd.Series([1,2,3,4]),
'D':pd.Series([11,12,13,14]), 'E':pd.Series([41,42,43,44])
})
,结果应为:
A B C D E
0 aa xx 1 11 41
1 aa yy 2 12 42
2 bb zz 3 13 43
3 bb zz 4 14 44
我希望平均'C','D'和'E'按'A'和'B'分组。我知道我可以使用
pd.DataFrame({'C_avg' : df.groupby(['A','B'])['C'].mean()}).reset_index()
pd.DataFrame({'D_avg' : df.groupby(['A','B'])['D'].mean()}).reset_index()
pd.DataFrame({'E_avg' : df.groupby(['A','B'])['E'].mean()}).reset_index()
获得单独的平均值。但是,我希望我的最终产品是像
这样的数据框A B C_avg D_avg E_avg
0 aa xx 1.0 11.0 41.0
1 aa yy 2.0 12.0 42.0
2 bb zz 3.5 13.5 43.5
即。喜欢这个数据帧:
df_avg=pd.DataFrame({
'A':pd.Series(['aa','aa','bb']),
'B':pd.Series(['xx','yy','zz']),
'C_avg':pd.Series([1.0,2.0,3.5]),
'D_avg':pd.Series([11.0,12.0,13.5]),
'E':pd.Series([41.0,42.0,43.5])
})
有没有快速或更干净的方式?非常感谢你。
答案 0 :(得分:1)
使用
In [237]: df.groupby(['A', 'B']).mean().add_suffix('_avg').reset_index()
Out[237]:
A B C_avg D_avg E_avg
0 aa xx 1.0 11.0 41.0
1 aa yy 2.0 12.0 42.0
2 bb zz 3.5 13.5 43.5
详细
In [238]: df
Out[238]:
A B C D E
0 aa xx 1 11 41
1 aa yy 2 12 42
2 bb zz 3 13 43
3 bb zz 4 14 44