How do I find the mean of each row of grouped columns in a database

Viewed 105

I have grouped columns on the basis of their names and I have 3 columns in each group.I am not able to get the average of each row of each group. For Example

Group 1

row 1: 1 2 3
row 2: 4 5 6
row 3: 7 8 9

Group 2

row 1: 4 2 3
row 2: 4 8 6
row 3: 7 8 12
Output

Group 1
---------Mean
row 1 : 2
row 2 : 5
row 3 : 8

Group 2
---------Mean
row 1 : 3
row 2 : 6
row 3 : 9

When I apply c=grouped.agg('mean',axis=0) I get this error "Numpy operations are not valid with groupby. Use .groupby(...).mean() instead"

Groupby.mean(axis=0) does not work either

1 Answers

If need processing values per rows use:

s = df.set_index(['a','b']).mean(axis=1)
print (s)
a        b    
Group 1  row 1    2.0
         row 2    5.0
         row 3    8.0
Group 2  row 1    3.0
         row 2    6.0
         row 3    9.0
dtype: float64

If need mean values per groups use this trick:

s1 = df.groupby(['a','b']).apply(lambda x: np.mean(x.to_numpy()))
#for old pandas versions
#s1 = df.groupby(['a','b']).apply(lambda x: np.mean(x.values))
print (s1)
a        b    
Group 1  row 1    2.0
         row 2    5.0
         row 3    8.0
Group 2  row 1    3.0
         row 2    6.0
         row 3    9.0
dtype: float64

Sample:

print (df)
         a      b  c  d   e
0  Group 1  row 1  1  2   3
1  Group 1  row 2  4  5   6
2  Group 1  row 3  7  8   9
3  Group 2  row 1  4  2   3
4  Group 2  row 2  4  8   6
5  Group 2  row 3  7  8  12
    
Related