python – 将列从一个数据框映射到另一个数据框以创建新列

前端之家收集整理的这篇文章主要介绍了python – 将列从一个数据框映射到另一个数据框以创建新列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个数据帧

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

即从一个数据帧映射到另一个数据帧创建新列

最佳答案
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

pd.concat 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

假设您的数据帧已经在商店中排序,第一个排序调用是多余的,在这种情况下您可以将其删除.

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

或者,显式创建映射.如果您想稍后使用它,则此方法有效.

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

猜你在找的Python相关文章