将列从一个数据框映射到另一数据框以创建新列
发布于 2021-01-29 19:29:00
我有一个数据框
id store address
1 100 xyz
2 200 qwe
3 300 asd
4 400 zxc
5 500 bnm
我有另一个数据框df2
serialNo store_code warehouse
1 300 Land
2 500 Sea
3 100 Land
4 200 Sea
5 400 Land
我希望我的最终数据框看起来像:
id store address warehouse
1 100 xyz Land
2 200 qwe Sea
3 300 asd Land
4 400 zxc Land
5 500 bnm Sea
即从一个数据框映射到另一个创建新列
关注者
0
被浏览
145
1 个回答
-
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
假设您的数据框已经在上排序
store
,则第一次排序调用是多余的,在这种情况下,您可以删除它。
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
或者,显式创建映射。如果您以后要使用它,它将起作用。
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