【问题标题】:merge_asof with multiple columns and forward direction具有多列和正向的merge_asof
【发布时间】: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

【问题讨论】:

    标签: python pandas merge


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 2022-09-29
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      相关资源
      最近更新 更多