Pandas DataFrame Groupby How to get the group as a list and get average of particular column

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

Answers (1)

Sayandip Dutta
Sayandip Dutta

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

Related Questions