从多个数据框获取均值并将结果插入新列

时间:2019-11-20 15:18:43

标签: python-3.x pandas

我目前正在大熊猫笔记本电脑上使用Python-3,遇到了棘手的时间来寻找可能是一个简单问题(初学者的问题!)的解决方案。我有多个具有相同列标题的数据框,并且希望获取每个数据框中两列的平均值(Col1和Col2),然后将结果插入到新的“摘要”数据框(dfSummary)的两个新列中。 / p>

到目前为止我所拥有的:

#find the average of Col1 and Col2 for each of the dataframes and display them in a chart

dfSummary=pandas.DataFrame({"Dataframe_Name":['Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6']})

dfList=[dfName1, dfName2, dfName3, dfName4, dfName5, dfName6]
for df in dfList:
    dfSummary['Col1_Mean']=df['Col1'].mean()
    dfSummary['Col2_Mean']=df['Col2'].mean()
print(dfCocktailEff)

运行此命令时,我得到的是这样的东西:

   Dataframe_Name  Col1_Mean  Col2_Mean
0           Name1       21.5       42.4
1           Name2       21.5       42.4
2           Name3       21.5       42.4
3           Name4       21.5       42.4
4           Name5       21.5       42.4
5           Name6       21.5       42.4

它看起来像我想要的样子,但是在每一行中,它仅显示dfName6的Col1和Col2的均值。我正在寻找dfList中每个数据帧中两列的平均值,以显示在其对应的行中。

我基本上希望for循环计算两列的平均值,然后将答案插入到其相应的行和列中,然后对其他数据帧重复此操作。我不太确定如何编辑我的for循环来正确执行此操作。我已经将其显示在下面:

   Dataframe_Name  Col1_Mean  Col2_Mean
0           Name1       20.3       41.3
1           Name2       22.1       42.1
2           Name3       21.1       42.8
3           Name4       22.0       43.1
4           Name5       21.8       41.9
5           Name6       21.5       42.4

其中dfName1中Col1的平均值= 20.3,dfName1中Col2的平均值= 41.3,依此类推...希望我已经对它进行了充分的解释。谢谢!

1 个答案:

答案 0 :(得分:0)

幸运的是,pandas提供了无需构造for循环即可汇总数据的方法。 (如果确实需要处理单个行,则pd.DataFrame()。iterrows()是一个序列生成器,)

方法是组合数据,按名称分组,然后计算每个均值。

首先,让我们创建一些数据以供使用...

name1 = pd.DataFrame([[1,2],[3,4],[5,6],[7,8],[9,0]], columns=['col1', 'col2'])
name2 = name1 * 2
name3 = name1 + 3

name1['Name'] = 'name1'
name2['Name'] = 'name2'
name3['Name'] = 'name3'

df = pd.concat([name1, name2, name3])

现在我们使用熊猫聚合

df.groupby('Name').mean()

       col1  col2
Name             
name1     5     4
name2    10     8
name3     8     7

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html