Python Pandas数据帧中SQL查询的等价性
我有两个表1.Table_A 2.Table_B我想使用Table_B更新Table_A特定列该列的新值,可能会出现Table_A中的行数与Table_B不匹配的情况。 我知道如何使用SQL编写更新表A的查询,但不确定如何在pandas中执行,我需要一个与pandas中的更新查询等效的查询 更新查询:Python Pandas数据帧中SQL查询的等价性,python,sql,pandas,dataframe,Python,Sql,Pandas,Dataframe,我有两个表1.Table_A 2.Table_B我想使用Table_B更新Table_A特定列该列的新值,可能会出现Table_A中的行数与Table_B不匹配的情况。 我知道如何使用SQL编写更新表A的查询,但不确定如何在pandas中执行,我需要一个与pandas中的更新查询等效的查询 更新查询: update table_A set dt_of_join = sq.dt_of_join from (select id_emp, max(joining) as dt_of_j
update table_A
set dt_of_join = sq.dt_of_join
from (select id_emp, max(joining) as dt_of_join
from table_B
group by id_emp ) as sq
where table_A.id_emp = sq.id_emp
我需要在熊猫数据框架中的上述查询等效,任何帮助真的感谢
例如:
Table_A
id_emp | dt_of_join
2 | 30-03-2018
4 | 03-04-2018
5 | 04-05-2018
7 | 10-06-2018
12 | 20-07-2018
10 | 09-08-2018
19 | 25-12-2018
表B是上述查询中的子查询
Table_B
id_emp | dt_of_join
4 | 01-01-2019
12 | 03-02-2019
10 | 09-05-2019
5 | 21-06-2019
更新查询成功后,表_A应如下所示
Table_A
id_emp | dt_of_join
2 | 30-03-2018
4 | 01-01-2019
5 | 21-06-2019
7 | 10-06-2018
12 | 03-02-2019
10 | 09-05-2019
19 | 25-12-2018
为什么不重新编制索引:
>>> df['dt_of_join'] = df2.set_index('id_emp').reindex(df['id_emp']).reset_index()['dt_of_join'].fillna(df['dt_of_join'])
>>> df
id_emp dt_of_join
0 2 30-03-2018
1 4 01-01-2019
2 5 21-06-2019
3 7 10-06-2018
4 12 03-02-2019
5 10 09-05-2019
6 19 25-12-2018
>>>
您可以与fillna()
一起使用,这是单列更新的一种更快的替代方法(假设id\u emp
是一列,如果不是d
应该是df2['dt\u of_join']
):
在将emp_id设置为这两个中的索引后考虑
final_df = (tbl1_df.set_index('id_emp')
.update(tbl2_df.set_index('id_emp'))
)
是的,我的意思是一样的,但是NaN不应该是NaN,它应该是你提到的上面的数据框中的任何一个c@RAHULVISHWAKARMA我编辑了我的答案,请接受我真的很感谢你的努力,但它仍然没有正确地回答我的问题。请你看看我刚刚编辑的问题,这样你就会知道我在做什么。
id_emp dt_of_join
0 2 30-03-2018
1 4 01-01-2019
2 5 21-06-2019
3 7 10-06-2018
4 12 03-02-2019
5 10 09-05-2019
6 19 25-12-2018
final_df = (tbl1_df.set_index('id_emp')
.update(tbl2_df.set_index('id_emp'))
)