【问题标题】:finding mean across rows in a dataframe with pandas使用 pandas 查找数据框中各行的均值
【发布时间】:2018-12-20 07:04:11
【问题描述】:

我有一个数据框

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

循环是一个很好的方法吗?还是有更好的? 如果循环是要走的路,如何让循环在数据框中工作?

【问题讨论】:

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


【解决方案1】:

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

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

如果想将 nex 列添加到原始 df 添加 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

【讨论】:

  • 完美运行。谢谢。
猜你喜欢
  • 2017-04-19
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多