Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫在范围内不等长地加入_Python_Sql_Pandas_Join_Analytics - Fatal编程技术网

Python 熊猫在范围内不等长地加入

Python 熊猫在范围内不等长地加入,python,sql,pandas,join,analytics,Python,Sql,Pandas,Join,Analytics,我需要做“熊猫非对等加入”, 当第一个表与范围内的第二个表联接时 第一张桌子 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 gr

我需要做“熊猫非对等加入”, 当第一个表与范围内的第二个表联接时

第一张桌子

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)

它们的长度一样吗?您可以执行第一个_表['grade_level']=第二个_表['grade_level']。使用值。值可删除索引问题。第一个表的长度不相同,1000行使用pd.concat。就像这个新的表=pd.concat([first\u table,second\u table],ignore\u index=True,axis=1)缺少的元素将用NaNI填充。当第一个表与范围内的第二个表连接时,我需要进行“熊猫非等连接”。你能说得更具体些吗?据我所知,这与合并/联接无关,但不清楚。具体说明:需要联接两个表,当合并条件第一个表的值在第二个表的两个值之间时。
   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