Option 1
utilisation df.merge
out = df1.merge(df2, left_on='store', right_on='store_code')\
[['id', 'store', 'address', 'warehouse']]
print(out)
id store address warehouse
0 1 100 xyz Land
1 2 200 qwe Sea
2 3 300 asd Land
3 4 400 zxc Land
4 5 500 bnm Sea
Option 2
En utilisant pd.concat
et df.sort_values
out = pd.concat([df1.sort_values('store'),\
df2.sort_values('store_code')[['warehouse']].reset_index(drop=1)], 1)
print(out)
id store address warehouse
0 1 100 xyz Land
1 2 200 qwe Sea
2 3 300 asd Land
3 4 400 zxc Land
4 5 500 bnm Sea
Le premier appel de tri est redondant en supposant votre dataframe déjà triée sur store
, dans ce cas, vous pouvez l'enlever.
Option 3
En utilisant df.replace
s = df1.store.replace(df2.set_index('store_code')['warehouse'])
print(s)
0 Land
1 Sea
2 Land
3 Land
4 Sea
df1['warehouse'] = s
print(df1)
id store address warehouse
0 1 100 xyz Land
1 2 200 qwe Sea
2 3 300 asd Land
3 4 400 zxc Land
4 5 500 bnm Sea
Vous pouvez également créer un mappage explicitement. Cela fonctionne si vous voulez l'utiliser plus tard.
mapping = dict(df2[['store_code', 'warehouse']].values) # separate step
df1['warehouse'] = df1.store.replace(mapping) # df1.store.map(mapping)
print(df1)
id store address warehouse
0 1 100 xyz Land
1 2 200 qwe Sea
2 3 300 asd Land
3 4 400 zxc Land
4 5 500 bnm Sea
Je reçois cette erreur lors de l'exécution du code .map dans un jeu de données similaire. 'Réindexation uniquement valide avec des objets Index de valeur unique' – Shubham
Je pense que vous avez des problèmes de doublons dans' store_code' dans 'df2'. donc besoin de 'df1 ['store']. map (df2.drop_duplicates ('store_code'). set_index ('store_code') ['warehouse'])' – jezrael
correct! Merci :) – Shubham