用熊猫在数据框中的各行中求平均值

时间:2018-07-12 06:53:16

标签: python-3.x pandas for-loop dataframe mean

我有一个数据框

L1_1 L1_2 L3_1 L2_1 L2_2 L1_3 L2_3 L3_2  ....
  3        5       1       5       7          2    3          2
  4        2      4        1        4         1    4          2

我需要找到均值“ L1”,均值“ L2”和均值“ L3”

我尝试了

data["Mean"]=data.mean(axis=1)

这给了我所有“ L1,L2和L3”的总和

我也尝试过

data[['L1_1','L1_2','L1_3','Mean']].head() 

但是我有L1_1到L1_20

所以循环听起来不错。但是,我无法循环工作。

 for i in range(1,21):
     c = "'L1_" + i + "'," + c

循环是前往此处的好方法吗?还是有更好的选择? 如果要循环,那么如何使循环在数据帧中工作?

1 个答案:

答案 0 :(得分:2)

(axis=1)列中的groupby与拆分值的自定义功能一起使用:

df1 = df.groupby(lambda x: x.split('_')[0], axis=1).mean()
#another solution 
#df1 = df.groupby(df.columns.str.split('_').str[0], axis=1).mean()
print (df1)
         L1   L2   L3
0  3.333333  5.0  1.5
1  2.333333  3.0  3.0

如果要在原始df中添加nex列,如果还希望重命名列名称,则将joinadd_suffix添加:

df = df.join(df1.add_suffix('_mean'))
print (df)
   L1_1  L1_2  L3_1  L2_1  L2_2  L1_3  L2_3  L3_2   L1_mean  L2_mean  L3_mean
0     3     5     1     5     7     2     3     2  3.333333      5.0      1.5
1     4     2     4     1     4     1     4     2  2.333333      3.0      3.0