具有多列和正向的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的主要内容,如果未能解决你的问题,请参考以下文章

正向搜索查询和反向搜索查询的区别是啥?

Nginx正向代理配置

nginx正向代理

负载均衡,正向代理,反向代理

深度学习正向传播反向传播和计算图(backprop)

nginx配置正向代理