数据框列表中对应元素的平均值

4

我有一个包含3个数据框的列表(形状相同且列名相同)。我想要计算每个数据框中对应元素的平均值。

df3 = pd.DataFrame(np.random.randn(8, 3), columns= ['M', 'N', 'O'])
df4 = pd.DataFrame(np.random.randn(8, 3), columns= ['M', 'N', 'O'])
df5 = pd.DataFrame(np.random.randn(8, 3), columns= ['M', 'N', 'O'])

目前,我的计划是这样的。

pd.DataFrame.add(df5, df4, df3)/3

但是我有一堆数据框要处理 - 假设是一个包含100个数据框的列表。请建议更好的方法来解决这个问题。是否有一种方法可以避免循环处理它们?

2个回答

4

您可以在列表上使用sum,然后除以列表的长度,而不考虑数据帧中可能存在的nans

list_of_dfs = [df3, df4, df5]
sum(list_of_dfs)/len(list_of_dfs)

#           M          N            O
#0  -0.264907   0.465489     0.238963
#1  -1.020216   0.235631    -0.227061
#2   0.331727   1.061115     0.188867

或者您可以使用reduce方法来调用pd.DataFrame.add将列表中的所有数据框相加:

reduce(pd.DataFrame.add, list_of_dfs)/len(list_of_dfs)
#           M          N            O
#0  -0.264907   0.465489     0.238963
#1  -1.020216   0.235631    -0.227061

如果使用Python 3,请首先导入reduce:

import reduce

from functools import reduce

我简直不敢相信它是如此简单,sum(list_of_dfs) / len(list_of_dfs) 如此简洁明了! - Nermin

2
你可以将数据框列表连接起来,重置索引,然后使用groupby获取平均值。
df3 = pd.DataFrame(np.random.randn(8, 3), columns= ['M', 'N', 'O'])
df4 = pd.DataFrame(np.random.randn(8, 3), columns= ['M', 'N', 'O'])
df5 = pd.DataFrame(np.random.randn(8, 3), columns= ['M', 'N', 'O'])

# create list of dfs
dflist = [df3, df4, df5]

# reset_index creates new var you will use for groupby
joined = pd.concat(dflist).reset_index()
means = joined.groupby('index').mean()


print(means)
              M         N         O
index                              
0     -0.345697  0.354027 -0.125968
1      0.018404 -0.130260 -0.721745
2     -0.396263  0.475361 -1.173686
3      0.560518  0.774065  0.188009
4      1.521029  0.332139  0.078057
5     -0.180118 -0.948808 -0.889329
6      0.476496  0.236885  0.774599
7     -0.340693 -0.598964  0.381229

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