我目前正在大熊猫笔记本电脑上使用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,依此类推...希望我已经对它进行了充分的解释。谢谢!
答案 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