Reputation: 41
I have a dataframe df
p m r
p1 m1 120
p1 m2 34
p1 m3 56
p2 m4 54
p2 m5 58
I need to group data on p and get the average of r and output should be like this:
p m r
p1 [m1,m2,m3] 70
p2 [m4,m5] 56
Upvotes: 4
Views: 48
Reputation: 15872
You can use groupby
and agg
:
>>> df.groupby('p').agg({'m': [list], 'r': ['mean']}).droplevel(1, axis=1)
m r
p
p1 [m1, m2, m3] 70
p2 [m4, m5] 56
Or,
>>> 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
Or,
>>> 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
Upvotes: 1