【问题标题】:Get mean and average from only certain columns in data frame仅从数据框中的某些列获取均值和平均值
【发布时间】:2023-02-09 14:53:13
【问题描述】:

我有以下数据框。

对于每个时间点(行)A1,A2,A3; A4,5,6; ... 是 3 个重复。我想获取每行 3 个组的平均值和标准差,并将其添加到新的 df 中。

我努力了:

new_df['A1-A3_mean']=np.mean(df[['A1','A2','A3']],axis=1)
new_df['A1-A3_std']=np.std(df[['A1','A2','A3']],axis=1)

哪个有效,但非常手动且耗时。我尝试使用 groupby('Time').agg({'mean','std'}) 但我不知道如何指定它应该始终采用 3 列。理想情况下,结果列将命名为 A1-3_mean / A1-3_stdev

提前致谢!

【问题讨论】:

  • 你能提供可重现的输入吗?
  • d = {'时间': [1, 2, 3], 'A1': [8, 2, 9], 'A2': [3, 2,5], 'A3': [3, 4,5] ,'A4': [1, 3, 3], 'A5': [3, 8,5], 'A6': [5, 2,5]} df = pd.DataFrame(data=d) df

标签: python pandas dataframe mean


【解决方案1】:

你可以试试:

N = 3

cols = list(df.drop(columns='time'))

mapper = {c: f'{cols[i//N]}-{cols[i//N+N-1]}' for i,c in enumerate(cols)}

g = df[cols].rename(columns=mapper).groupby(level=0, axis=1)

out = pd.concat({x: g.agg(x) for x in ['mean', 'std']}, axis=1)

输出:

       mean                 std          
      A1-A3     A2-A4     A1-A3     A2-A4
0  4.666667  3.000000  2.886751  2.000000
1  2.666667  4.333333  1.154701  3.214550
2  6.333333  4.333333  2.309401  1.154701

【讨论】:

  • 这给了我一个值错误:len(index) != len(labels)
  • 你能提供一个可重现的 DataFrame 作为输入吗?不是图像
  • 嗨 Mozway,d = {'time': [1, 2, 3],'A1': [8, 2, 9], 'A2': [3, 2,5],'A3': [3, 4,5],'A4': [1, 3, 3], 'A5': [3, 8,5],'A6': [5, 2,5]} df = pd.DataFrame(data=d) df
  • @Felix 好的,查看更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 2019-01-20
  • 2013-12-15
  • 1970-01-01
相关资源
最近更新 更多