数据框的平均值

3

有没有一种直接的方法来计算多个数据框(例如多次模拟运行)的平均值? 我目前使用的一种方法是针对3个数据框(df1, df2, df3),但在处理大量数据框时并不是最有效的方法:

(df1+df2+df3)/3

有没有一种更直接的方式可以告诉Python做一些像 mean(df1,df2,df3) 这样的事情?

2
这个回答解决了你的问题吗?获取多个Pandas数据框的平均值 - Guy
你能否让这个问题更加清晰一些?我不确定你是否想要对三个数据框中的所有数值进行求和并取平均值。请问你有任何数据和输出可以与我们分享吗? - Celius Stingher
假设每个数据框都有唯一的索引,并且所有数据框都具有相同的索引:pd.concat((df1, df2, df3)).mean(level=0) - Quang Hoang
2个回答

5
为了避免使用concat,可以将所有的数据转换为numpy数组,并使用axis=0的mean函数,最后将输出转换为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)

1
谢谢!这回答了我的问题,我只是惊讶于没有像Mathematica那样直接提供此功能的内置函数。 - Karim
@Karim - 很遗憾,我认为还没有。 - jezrael

1

显然,所有的数据单元格都包含数值数据,如果你像这样计算平均值。我能想到的唯一改进是使用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刚刚发布了相同的想法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接