平均大熊猫

时间:2018-02-21 10:46:58

标签: pandas dataframe group-by average

假设我已经通过

创建了一个数据框
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])
})

有没有快速或更干净的方式?非常感谢你。

1 个答案:

答案 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