具有多列和正向的merge_asof
Posted
技术标签:
【中文标题】具有多列和正向的merge_asof【英文标题】:merge_asof with multiple columns and forward direction 【发布时间】:2021-08-28 20:18:44 【问题描述】:我有 2 个数据框:
q = pd.DataFrame('ID':[700,701,701,702,703,703,702],'TX':[0,0,1,0,0,1,1],'REF':[100,120,144,100,103,105,106])
ID TX REF
0 700 0 100
1 701 0 120
2 701 1 144
3 702 0 100
4 703 0 103
5 703 1 105
6 702 1 106
和
p = pd.DataFrame('ID':[700,701,701,702,703,703,702,708],'REF':[100,121,149,100,108,105,106,109],'NOTE':['A','B','V','V','T','A','L','M'])
ID REF NOTE
0 700 100 A
1 701 121 B
2 701 149 V
3 702 100 V
4 703 108 T
5 703 105 A
6 702 106 L
7 708 109 M
我希望以 ID 相等且 REF 精确或更高的方式将 p 与 q 合并。
示例 1:
for p: ID=700 and REF=100 and
for q: ID=700 and RED=100 So that's a clear match!
示例 2 为 p:
1 701 0 120
2 701 1 144
他们会匹配到:
1 701 121 B
2 701 149 V
这样:
1 701 0 120 121 B 121 is just after 120
2 701 1 144 149 V 149 comes after 144
当我使用下面的代码时 注意:我只指出错误的 REF。应该是 ID AND REF:
p = p.sort_values(by=['REF'])
q = q.sort_values(by=['REF'])
pd.merge_asof(p, q, on='REF', direction='forward').sort_values(by=['ID_x','TX'])
我遇到了这个问题:
我的预期结果应该是这样的:
ID TX REF REF_2 NOTE
0 700 0 100 100 A
1 701 0 120 121 B
2 701 1 144 149 V
3 702 0 100 100 V
4 703 0 103 108 T
5 703 1 105 105 A
6 702 1 106 109 L
【问题讨论】:
【参考方案1】:这行得通吗?
pd.merge_asof(q.sort_values(['REF', 'ID']),
p.sort_values(['REF', 'ID']),
on='REF',
direction='forward',
by='ID').sort_values('ID')
输出:
ID TX REF NOTE
0 700 0 100 A
5 701 0 120 B
6 701 1 144 V
1 702 0 100 V
4 702 1 106 L
2 703 0 103 A
3 703 1 105 A
【讨论】:
以上是关于具有多列和正向的merge_asof的主要内容,如果未能解决你的问题,请参考以下文章