python pandas dataframe mapping

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í:

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


Usa el map o join :

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