python - Asignación de columnas de un marco de datos a otro para crear una nueva columna
pandas dataframe (2)
df.merge
out = (df1.merge(df2, left_on=''store'', right_on=''store_code'')
.reindex(columns=[''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
pd.concat
+
df.sort_values
u = df1.sort_values(''store'')
v = df2.sort_values(''store_code'')[[''warehouse'']].reset_index(drop=1)
out = pd.concat([u, v], 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
La primera llamada de clasificación es redundante, suponiendo que su marco de datos ya esté ordenado en la
store
, en cuyo caso puede eliminarlo.
df.replace
/
df.map
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
Alternativamente, cree una asignación explícitamente. Esto funciona si quieres usarlo más tarde.
mapping = dict(df2[[''store_code'', ''warehouse'']].values)
df1[''warehouse''] = 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
Esta pregunta ya tiene una respuesta aquí:
- Pandas Merging 101 2 respuestas
tengo un marco de datos
id store address
1 100 xyz
2 200 qwe
3 300 asd
4 400 zxc
5 500 bnm
tengo otro dataframe df2
serialNo store_code warehouse
1 300 Land
2 500 Sea
3 100 Land
4 200 Sea
5 400 Land
Quiero que mi marco de datos final se vea así:
id store address warehouse
1 100 xyz Land
2 200 qwe Sea
3 300 asd Land
4 400 zxc Land
5 500 bnm Sea
es decir, asignar de un marco de datos a otro creando una nueva columna
df1[''warehouse''] = df1[''store''].map(df2.set_index(''store_code'')[''warehouse''])
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
df1 = df1.join(df2.set_index(''store_code''), on=[''store'']).drop(''serialNo'', 1)
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