我有两个表1.Table_A 2.Table_B我想使用table_B对该列的新值来更新table_A特定列,这可能是因为Table_A中的行数与Table_B不匹配。 我知道如何使用SQL编写查询以更新Table_A,但不确定如何在熊猫中做到这一点,我需要在熊猫中使用等效的更新查询
更新查询:
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
我需要在Pandas Dataframe中实现上述查询的等同功能,对您的帮助非常感谢。
示例:
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
更新查询成功后,table_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
答案 0 :(得分:1)
为什么不reindex
:
>>> 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
>>>
答案 1 :(得分:1)
您可以将series.map()
与fillna()
一起使用,这是单个col更新的更快选择(假设id_emp
是一列,否则d
应该是{{1 }}):
df2['dt_of_join']
d=df2.set_index('id_emp')['dt_of_join']
df1.dt_of_join=df1.id_emp.map(d).fillna(df1.dt_of_join)
print(df1)
答案 2 :(得分:0)
将{em> emp_id 设置为两者的索引后,请考虑DataFrame.update。
final_df = (tbl1_df.set_index('id_emp')
.update(tbl2_df.set_index('id_emp'))
)