首页 > 解决方案 > 数据帧的平均值

问题描述

假设我有三个具有相同索引和相同列名的数据框(有些列是字符串,有些是数字):df1、df2、df3。

df1

Hour | X1 | X2 | X3 | X4
 0   | 10 | H | 2   | -1  
 1   | 10 | b | 1   | 0 
 2   | 10 | D | 1   | 0 
 3   | 20 | L | 1   | 0

df2

Hour | X1 | X2 | X3 | X4
 0   | 10 | H | 1   | 1  
 1   | 10 | b | 1   | 0 
 2   | 10 | D | 1   | 0 
 3   | 20 | L | 2   | 0

df3

Hour | X1 | X2 | X3 | X4
 0   | 10 | H  | 0  |  0  
 1   | 10 | b  | 0  |  0 
 2   | 10 | D  | 0  |  0 
 3   | 20 | L  | 0  |  30

我想要一个新的数据框,它是这些数据框的数值平均值,但保持字符串列不变(所有字符串列都相同)。

df4 =

Hour | X1 | X2 | X3 | X4
 0   | 10 | H | 1 | 0  
 1   | 10 | b | 1 | 0 
 2   | 10 | D | 1 | 0 
 3   | 20 | L | 1 | 10

我更喜欢使用 add 函数,因为我必须编写一个 for 循环来访问每个数据帧。谢谢!

标签: pythonpandasdataframe

解决方案


这样concatagg

pd.concat([df1,df2,df3]).groupby(level=0).agg(lambda x : x.mean() if x.dtype=='int64' else x.head(1))

推荐阅读