Pandas DataFrame Groupby如何获取组作为列表并获取特定列的平均值



我有一个数据框架df

p    m    r
p1     m1   120
p1     m2   34
p1     m3   56
p2     m4   54
p2     m5   58

我需要把p上的数据分组,得到r的平均值,输出应该是这样的:

p      m           r
p1    [m1,m2,m3]  70
p2    [m4,m5]     56

您可以使用groupbyagg:

>>> df.groupby('p').agg({'m': [list], 'r': ['mean']}).droplevel(1, axis=1) 
m   r
p                   
p1  [m1, m2, m3]  70
p2      [m4, m5]  56

>>> df.groupby('p').agg({'m': [list], 'r': ['mean']}).droplevel(1, axis=1).reset_index()

p             m   r
0  p1  [m1, m2, m3]  70
1  p2      [m4, m5]  56

>>> df.groupby('p', as_index=False).agg(m=('m', list), r=('r','mean'))
p             m   r
0  p1  [m1, m2, m3]  70
1  p2      [m4, m5]  56

最新更新