python - 如何使用 merge_as 在两列上合并两个数据框?
问题描述
我有两个数据框,有两个索引,name, time
我想要的是将它们合并到name
and上time
。
例如:
In [30]: import numpy as np
In [31]: a = pd.DataFrame(np.reshape(range(25), (5,5)))
In [32]: b = pd.DataFrame(np.reshape(range(25), (5,5)))
In [33]: a['name'] = ['a', 'b', 'c', 'c','d']
In [34]: b['name'] = ['a', 'b', 'b', 'c','d']
In [35]: a
Out[35]:
0 1 2 3 4 name
0 0 1 2 3 4 a
1 5 6 7 8 9 b
2 10 11 12 13 14 c
3 15 16 17 18 19 c
4 20 21 22 23 24 d
In [36]: b
Out[36]:
0 1 2 3 4 name
0 0 1 2 3 4 a
1 5 6 7 8 9 b
2 10 11 12 13 14 b
3 15 16 17 18 19 c
4 20 21 22 23 24 d
In [38]: pd.merge_asof(a, b, on=['name', 4], tolerance=pd.Timedelta('200ms'), direction='nearest', suffixes=['', '_x']) # here failed
因为name
,我需要完全匹配。因为time
,我可以有一个edurance。
我知道merge_as
可以按时间间隔合并数据帧。
但我发现它不能在两列中使用。
你能帮忙吗?如何将它们与完全匹配name
和间隔匹配合并time
?
解决方案
您可以通过 by 进行精确匹配,还需要转换为 datetime
a['key'] = pd.to_datetime(a[4])
b['key'] = pd.to_datetime(b[4])
out = pd.merge_asof(a, b, by = ['name'],on=['key'], tolerance=pd.Timedelta('200ms'), direction='nearest', suffixes=['', '_x'])
Out[59]:
0 1 2 3 4 ... 0_x 1_x 2_x 3_x 4_x
0 0 1 2 3 4 ... 0 1 2 3 4
1 5 6 7 8 9 ... 5 6 7 8 9
2 10 11 12 13 14 ... 15 16 17 18 19
3 15 16 17 18 19 ... 15 16 17 18 19
4 20 21 22 23 24 ... 20 21 22 23 24
推荐阅读
- python - python代码将终止用户输入的另一个进程(例如chrome.exe)?
- go - 在 main 中找不到包
- c# - 从属性调整数组大小
- c++ - 2d Kadane 算法中的逻辑错误有什么问题?
- sql - 获取 array_agg 以根据另一列过滤重复项
- javascript - 条件或语句的困难
- python - 如果所有列都有空字符串,则从熊猫数据框中删除行
- jquery - React 可以检测到使用 jQuery 对组件属性所做的更改吗?
- javascript - 使用 jquery 动画创建深度错觉
- webpack - 如何使用 Webpack 的 `raw-loader` 加载二进制文件?