J'ai deux tables 1.Table_A 2.Table_B Je voudrais mettre à jour table_A particulière colonne en utilisant table_B de nouvelles valeurs pour cette colonne, il peut arriver que le nombre de lignes de Table_A ne corresponde pas à Table_B. Je sais comment écrire une requête pour mettre à jour Table_A en utilisant SQL mais je ne sais pas comment faire dans les pandas, j'ai besoin d'un équivalent de la requête de mise à jour dans les pandas
Requête de mise à jour:
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
J'ai besoin de l'équivalent de la requête ci-dessus dans Pandas Dataframe, toute aide vraiment appréciée.
Exemple:
Table_B id_emp | dt_of_join 4 | 01-01-2019 12 | 03-02-2019 10 | 09-05-2019 5 | 21-06-2019
Le tableau B est la sous-requête qui se trouve à l'intérieur du requête ci-dessus
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
Une fois la requête de mise à jour réussie, la table_A devrait ressembler à ceci
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
3 Réponses :
Pourquoi pas 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
>>>
oui, je veux dire la même chose mais que NaN ne devrait pas être NaN, il devrait être ce qu'il était avant pour la base de données ci-dessus, vous avez mentionné que cela devrait être c
@RAHULVISHWAKARMA J'ai modifié ma réponse, veuillez l'accepter
Hé, j'apprécie vraiment vos efforts, mais cela n'a toujours pas répondu correctement à ma question.Pouvez-vous s'il vous plaît jeter un œil à la question que je viens de modifier afin que vous ayez une idée de ce que je pense.
Vous pouvez utiliser series.map () avec fillna () qui est une alternative plus rapide pour une seule mise à jour de col (en supposant id_emp code> est une colonne, sinon d doit être df2 ['dt_of_join'] ): 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
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)