3

I have a pandas dataframe

 df = pd.DataFrame([[0,1,10,15],[1,5,7,10],[10,15,0,0]], columns=['Apple','Orange','Banana','Pear'], index=['basket1','basket2','basket3'])

I need to generate a dataframe that looks like

Fruit   Apple   Orange   Banana  Pear  mean_basket

basket1   0        1       10     15     6.5

basket2   1        5        7     10     5.75

basket3   10       15       0      0     6.25

mean_fruit 3.66     7       5.66   8.33   6.16

I did df['mean_basket'] = df.mean(axis=1) and generated the last column. By df.mean(axis=0), I get the mean of each column but I do not know how to add it as a new row to the dataframe. Please help.

dreamer
  • 317
  • 1
  • 13
Ssank
  • 3,367
  • 7
  • 28
  • 34

2 Answers2

5
df = pd.DataFrame([[0,1,10,15],[1,5,7,10],[10,15,0,0]], columns=['Apple','Orange','Banana','Pear'], index=['basket1','basket2','basket3'])
df['mean_basket'] = df.mean(axis=1)
df.loc['mean_fruit'] = df.mean()
df
Scott Boston
  • 147,308
  • 15
  • 139
  • 187
1
df.append(df.mean().rename('mean_fruit')).assign(mean_basket=lambda df: df.mean(1))

                Apple  Orange     Banana       Pear  mean_basket
basket1      0.000000     1.0  10.000000  15.000000     6.500000
basket2      1.000000     5.0   7.000000  10.000000     5.750000
basket3     10.000000    15.0   0.000000   0.000000     6.250000
mean_fruit   3.666667     7.0   5.666667   8.333333     6.166667

Or using pipe

df.assign(
    mean_basket=df.mean(1)
).pipe(lambda df: df.append(df.mean().rename('mean_fruit')))

                Apple  Orange     Banana       Pear  mean_basket
basket1      0.000000     1.0  10.000000  15.000000     6.500000
basket2      1.000000     5.0   7.000000  10.000000     5.750000
basket3     10.000000    15.0   0.000000   0.000000     6.250000
mean_fruit   3.666667     7.0   5.666667   8.333333     6.166667

piRSquared
  • 285,575
  • 57
  • 475
  • 624