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

发布于 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 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看