Pandas 通过取列之间的平均值来合并两个数据框

Posted

技术标签:

【中文标题】Pandas 通过取列之间的平均值来合并两个数据框【英文标题】:Pandas merge two dataframes by taking the mean between the columns 【发布时间】:2018-01-17 05:22:03 【问题描述】:

我正在使用 Pandas DataFrames 并希望在其中两个之间取平均值。我正在寻找具有相同名称的列之间的平均值。 例如

df1

    time     x    y     z
 0     1  1.25  2.5  0.75
 1     2  2.75  2.5  3.00
 2     3  1.50  2.5  1.25
 3     4  3.00  2.5  3.50
 4     5  0.50  2.5  2.25

df2

    time     x    y     z
 0     2  0.75  2.5  1.75
 1     3  3.00  2.5  3.00
 2     4  1.25  2.5  0.25
 3     5  3.50  2.5  2.00
 4     6  2.25  2.5  2.25

我正在寻找的结果是

df3

    time     x    y     z
 0     1  1.25  2.5  0.75
 1     2  1.75  2.5  2.375
 2     3  2.25  2.5  2.125
 3     4  2.125 2.5  1.875
 4     5  2.00  2.5  2.125
 5     6  2.25  2.5  2.25

在 Pandas 中是否有一种简单的方法可以做到这一点,使用合并功能或类似功能? 我正在寻找一种无需指定列名的方法。

【问题讨论】:

【参考方案1】:

我认为你需要concat + groupby 和聚合mean

df = pd.concat([df1, df2]).groupby('time', as_index=False).mean()
print (df)
   time      x    y      z
0     1  1.250  2.5  0.750
1     2  1.750  2.5  2.375
2     3  2.250  2.5  2.125
3     4  2.125  2.5  1.875
4     5  2.000  2.5  2.125
5     6  2.250  2.5  2.250

【讨论】:

会 pd.merge(df1, df2, left_index=True, right_index=True, how='outer').mean(axis=1) 做同样的事情,还是我在这里弄错了?跨度> @Uvar - 不幸的是没有,因为在merge 之后得到列 - ['time_x', 'x_x', 'y_x', 'z_x', 'time_y', 'x_y', 'y_y', 'z_y'] 谢谢!我试过这个,但忘记了 df1, df2 @jezrael 周围的方括号 [] @Uvar 您的操作会导致仅剩一列。 0 1.56250 1 2.71875 2 2.03125 3 3.25000 4 2.90625 那我确实错了。感谢您的额外见解! :)

以上是关于Pandas 通过取列之间的平均值来合并两个数据框的主要内容,如果未能解决你的问题,请参考以下文章

从由数组组成的数据框中取列的平均值

在 Pandas 中合并数据框(没有列名)

通过比较时间和持续时间来合并数据框 pandas 中的行

合并一个值在另外两个之间的熊猫数据框[重复]

如何在我的 Pandas 数据框中合并绝对值?

Pandas 合并具有不同列的两个数据框