如何以有效方式将具有MultiIndex的数据框合并到另一个数据框?

时间:2018-08-07 06:39:15

标签: python python-2.7 pandas pandas-groupby

我有两个DataFrame,我想从数据帧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

我想使用farepu_c分组的do_c的中位数,使用:

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

这将导致:

pu_c  do_c
0     5       15
1     1        3

现在,我想将a中的df1中计算出的中位数票价合并到另一个数据帧中,例如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})

1 个答案:

答案 0 :(得分:2)

a转换为数据框,然后使用median_fare将值重命名为a.to_frame('median_fare'),重置索引,然后与df2进行外部合并。它将自动合并到两个共同的列(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