python - 如何以有效的方式将具有 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_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 循环和凌乱的代码来做到这一点。我想知道是否有一种使用熊猫merge
或concat
函数的有效方法。
在这个例子中我想要的输出是
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})
解决方案
变成a
一个数据框并将值重命名为median_fare
using a.to_frame('median_fare')
,重置索引,然后与df2
. 它将自动合并在共同的 2 列 (do_c
和pu_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
推荐阅读
- awk - 带有 IP 和端口的 GREP 和 AWK 文件
- git - 错误:RPC 失败;curl 92 HTTP/2 流 0 未完全关闭:PROTOCOL_ERROR (err 1)
- air - 原因:输入无效。ld:找不到 -lclang_rt.ios 的库
- swift - 编辑部分 UITextview
- spring - 如何指定具体的请求映射url
- python - 如何从 nGram 列表中加载计数向量器?
- ios - 如何仅在 webview 中播放视频而不是在 swift 中全屏播放
- python - 400 Error while reading data, error message: CSV table遇到太多错误,放弃。行数:29274;错误:1
- azure - 如何在构建定义工艺品中包含逻辑应用程序开发和 uat 参数 JSON 文件
- python - c++ 版本的 python 的 exec() 函数