范围内的熊猫非等分连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了范围内的熊猫非等分连接相关的知识,希望对你有一定的参考价值。

我需要进行“熊猫非平等加入”,当第一个表与第二个表在范围内合并时。

first_table

EMPLOYEE_ID SALARY
100     3000.00
101     17000.00
102     17000.00
103     9000.00
104     6000.00
105     4800.00
106     4800.00
…………..  …………
………………. …………

second_table
grade_id    lowest_sal  highest_sal grade_level
1   0       3500    GRADE-A
2   3501    7000    GRADE-B
3   7001    10000   GRADE-C
4   10000   20000   GRADE-D

Need_table(OUTPUT):
EMPLOYEE_ID SALARY  grade_level
115        3000         GRADE-A
116        17000        GRADE-D
117        17000        GRADE-D
118        9000         GRADE-C
119        6000         GRADE-B
125        4800         GRADE-B
126        4800         GRADE-B

此等效的SQL查询为:

SELECT   f.EMPLOYEE_ID,
         f.SALARY,
         s.grade_level
FROM first_table f JOIN second_table s
ON f.SALARY BETWEEN s.lowest_sal AND s.highest_sal

无法使用'pd.merge'方法连接表,因为没有任何公共列。...请帮忙找到方法

谢谢

答案

如果df1是您的第一个表,df2是您的第二个表,则可以这样做:

d = df2.set_index('grade_level').to_dict('split')

df1['GRADE'] = df1['SALARY'].apply(
        lambda x: next((c for i, c in enumerate(d['index']) if d['data'][i][1] <= x <= d['data'][i][2]), np.nan)
    )

print(df1)

打印:

   EMPLOYEE_ID   SALARY    GRADE
0          100   3000.0  GRADE-A
1          101  17000.0  GRADE-D
2          102  17000.0  GRADE-D
3          103   9000.0  GRADE-C
4          104   6000.0  GRADE-B
5          105   4800.0  GRADE-B
6          106   4800.0  GRADE-B

以上是关于范围内的熊猫非等分连接的主要内容,如果未能解决你的问题,请参考以下文章

熊猫仅分箱时间列而不是自定义范围中的日期[重复]

连接/合并日期范围内的 mp3 文件

在熊猫中按范围加入/合并的最佳方式

熊猫列内的映射值

python 正则表达式

Python - 删除范围之间的特定频率