首页 > 解决方案 > 如何根据熊猫的范围进行匹配

问题描述

例如,我有下表

              Name   Language   SalaryBegin    SalaryEnd
              Tom      C+=         20            30
              Jeff     C--         21            32
              Hideo    JAVA        22             29
              TomoHiro RATCHET     19              20

              Name     Language       SalaryBegin SalaryEnd
              Tom      python        26            27
              jeff      python       22            23
               Hideo     JAVA     23              26

我的问题是如何使用 pandas 根据间隔匹配薪水开始和薪水结束。例如对于 Hideo (23,26) 在 (22,29) 内部并且也按语言匹配。

我没有

table4=pd.merge(table3,table1,how="inner",on=["Language","SalaryBegin","SalaryEnd"])
#this is does not work

标签: pandas

解决方案


df.merge与 一起使用df.query

In [284]: df1
Out[284]: 
       Name Language  SalaryBegin  SalaryEnd
0       Tom      C+=           20         30
1      Jeff      C--           21         32
2     Hideo     JAVA           22         29
3  TomoHiro  RATCHET           19         20

In [286]: df2
Out[286]: 
    Name Language  SalaryBegin  SalaryEnd
0    Tom   python           26         27
1   jeff   python           22         23
2  Hideo     JAVA           23         26

In [291]: result = df1.merge(df2, on=['Name', 'Language']).query('SalaryBegin_y >= SalaryBegin_x & SalaryEnd_y <= SalaryEnd_x')[['Name', 'Language']]

In [292]: result
Out[292]: 
    Name Language
0  Hideo     JAVA

推荐阅读