【问题标题】:Average over dataframes数据帧的平均值
【发布时间】:2020-02-27 13:09:33
【问题描述】:

是否有直接的方法来获取多个数据帧的平均值(例如多次运行模拟)? 我使用的一种方法是使用 3 个数据帧(df1、df2、df3),但在拥有大量数据帧时不是最有效的方法是:

(df1+df2+df3)/3

有没有办法告诉 Python 做一些更直接的事情,比如 mean(df1,df2,df3)

【问题讨论】:

  • 这能回答你的问题吗? Get the mean across multiple Pandas DataFrames
  • 你能否让这个问题更清楚一点,如果你想将 3 个数据帧中的所有数值相加并取平均值,我觉得不清楚吗?您有任何数据和输出可以与我们分享吗?
  • 假设每个数据帧都是唯一索引的,并且都具有相同的索引:pd.concat((df1, df2, df3)).mean(level=0)

标签: python pandas dataframe


【解决方案1】:

为了避免concat,可以将所有数据转换为numpy数组并使用mean by axis=0,最后将输出转换为DataFrame构造函数:

df1 = pd.DataFrame({
         'A':[4,5,4],
         'B':[7,8,90],
})

df2 = pd.DataFrame({
         'A':[4,50,4],
         'B':[7,8,9],
})

df3 = pd.DataFrame({
         'A':[40,5,4],
         'B':[7,8,9],
})

print ((df1+df2+df3)/3)
      A     B
0  16.0   7.0
1  20.0   8.0
2   4.0  36.0

dfs = [df1, df2, df3]
df = pd.DataFrame(np.array([x.to_numpy() for x in dfs]).mean(axis=0), 
                  index=df1.index, 
                  columns=df1.columns)
print (df)
      A     B
0  16.0   7.0
1  20.0   8.0
2   4.0  36.0

对于较旧的 pandas 版本,将 DataFrame.to_numpy 更改为 DataFrame.values

df = pd.DataFrame(np.array([x.values for x in dfs]).mean(axis=0), 
                  index=df1.index, 
                  columns=df1.columns)

【讨论】:

  • 谢谢!这回答了我的问题,令我惊讶的是,没有像 Mathematica 那样直接执行此操作的内置函数。
  • @Karim - 不幸的是,我认为还没有。
【解决方案2】:

如果您像这样计算平均值,显然所有数据单元格都包含数字数据。 我能想到的唯一增强是使用 numpy 数组。

import numpy as np

def df_mean(*dfs):
    return np.array([np.array(df) for df in dfs]).mean(axis=0)

df_mean(df1, df2, df3) # you can put as many dfs as arguments as you want.

啊@jezrael 刚刚发布了同样的想法。

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2021-01-26
    • 2016-11-08
    相关资源
    最近更新 更多