首页 > 解决方案 > 如何以有效的方式将具有 MultiIndex 的数据帧合并到另一个数据帧中?

问题描述

我有两个数据框,我想从数据框 A 中获取由一组其他两列分组的一列的中值,然后将计算出的中值合并到数据框 B 中。让我使用下面的示例进行解释:

我有两个DataFrame看起来像

# DataFrame 1
   pu_c  do_c  fare
0     0     5    10
1     0     5    20
2     1     1     3

# DataFrame 2
   pu_c  do_c
0     0     3
1     0     5
2     1     1

我想采用fare分组的中位数pu_cdo_c使用:

a = df1.groupby(['pu_c', 'do_c']).median()['fare']

这将导致:

pu_c  do_c
0     5       15
1     1        3

现在我想将计算出的中位票价合并adf1另一个数据框中,例如df2. 我知道如何使用 for 循环和凌乱的代码来做到这一点。我想知道是否有一种使用熊猫mergeconcat函数的有效方法。

在这个例子中我想要的输出是

   pu_c  do_c  median_fare
0     0     3  NaN (or whatever)
1     0     5  15
2     1     1  3

注意:要重现我的数据框,请使用:

import pandas as pd
pu_c = [0, 0, 1]
do_c = [5, 5, 1]
do_c2 = [3, 5, 1]
fare = [10, 20, 3]

df1 = pd.DataFrame({'pu_c': pu_c, 'do_c': do_c, 'fare': fare})
df2 = pd.DataFrame({'pu_c': pu_c, 'do_c': do_c2})

标签: pythonpython-2.7pandaspandas-groupby

解决方案


变成a一个数据框并将值重命名为median_fareusing a.to_frame('median_fare'),重置索引,然后与df2. 它将自动合并在共同的 2 列 (do_cpu_c)

df2.merge(a.to_frame('median_fare').reset_index(), how='outer')

   do_c  pu_c  median_fare
0     3     0          NaN
1     5     0         15.0
2     1     1          3.0

推荐阅读