假设我已经创建了一个
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])
})有没有快捷或清洁的方法?非常感谢。
发布于 2018-02-21 10:56:19
使用
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 44https://stackoverflow.com/questions/48903957
复制相似问题