【问题标题】:How to merge a dataframe with MultiIndex into another dataframe in an efficient way?如何以有效的方式将具有 MultiIndex 的数据帧合并到另一个数据帧中?
【发布时间】:2019-01-14 03:56:23
【问题描述】:

我有两个数据帧,我想从数据帧 A 中取一个由一组其他两列分组的列的中位数,然后将计算出的中位数合并到数据帧 B 中。让我用下面的例子来解释一下:

我有两个DataFrames,看起来像

# 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

现在我想将在a 中计算的中值票价从df1 合并到另一个数据框,例如df2。我知道如何使用 for 循环和凌乱的代码来做到这一点。我想知道是否有使用 pandas 的 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})

【问题讨论】:

    标签: python python-2.7 pandas pandas-groupby


    【解决方案1】:

    a 转换为数据框并使用a.to_frame('median_fare') 将值重命名为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
    

    【讨论】:

    • 谢谢!其实a已经是DataFrame,不需要转了。 reset_index() 成功了,让我使用merge
    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多