Python 数据帧列表中相应元素的平均值
我有一个3个数据帧的列表(相同的形状和相同的列名)。我想取每个数据帧中所有对应元素的平均值Python 数据帧列表中相应元素的平均值,python,python-2.7,python-3.x,pandas,dataframe,Python,Python 2.7,Python 3.x,Pandas,Dataframe,我有一个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'])
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个数据帧的列表。请建议一个更好的方法来解决这个问题。有没有不循环的方法?您可以在列表上使用
sum
,然后除以列表的len,而不考虑数据框中可能出现的nan
:
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:
from functools import reduce
您可以连接数据帧列表,重置索引,然后使用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