pandas dataframe根据另一个数据帧中的值将值附加到一列

时间:2017-06-28 21:04:19

标签: python pandas join dataframe

我有两个数据框,我想根据与第二个数据帧匹配的值在第一个数据帧中添加一列。

首先df = df1

   OCC_1988 DIST    YEAR    COW EST_LEV
0   0       100.00  1988    NaN 4
1   10000   5.83    1988    3.0 4
2   13002   0.28    1988    3.0 4
3   13005   0.16    1988    3.0 4
4   13008   0.06    1988    3.0 4
5   13011   0.38    1988    3.0 4
6   13014   0.39    1988    3.0 4
7   13017   0.16    1988    3.0 4
8   15017   0.22    1988    3.0 4
9   15023   1.96    1988    3.0 4

10 19005 1.30 1988 3.0 4

第二个df = df2

    soccode oescode oes99code
0   11-1011 19002   11-1011
1   11-1011 19005   11-1011
2   11-1021 19002   11-1021
3   11-1021 19005   11-1021
4   11-1031 15023   11-1031
5   11-2011 13011   11-2011
6   11-2021 13014   11-2021
7   11-2022 13002   11-2022
8   11-2031 13005   11-2031
9   11-3011 13008   11-3011
10  11-3021 13017   11-3021
11  11-3031 15017   11-3031
12  11-3041 10000   11-3040

我希望将df1 ['OCC_1988']与df2 ['oescode']匹配,并将匹配的df2 ['soccode']值添加到新添加的列'new_occ_2000'。

所以最终的df会是这样的:

   OCC_1988 DIST    YEAR    COW EST_LEV new_occ_2000
0   0       100.00  1988    NaN 4       Nan
1   10000   5.83    1988    3.0 4       11-3041      
2   13002   0.28    1988    3.0 4       11-2022
3   13005   0.16    1988    3.0 4       11-2031
4   13008   0.06    1988    3.0 4       11-3011
5   13011   0.38    1988    3.0 4       11-2011
6   13014   0.39    1988    3.0 4       11-2021
7   13017   0.16    1988    3.0 4       11-3021
8   15017   0.22    1988    3.0 4       11-3031
9   15023   1.96    1988    3.0 4       11-1031

10 19005 1.30 1988 3.0 4 11-1021

有没有优雅的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

使用merge

(df1.merge(df2[['oescode','soccode']], left_on='OCC_1988', right_on='oescode', how='left')
    .drop('oescode',axis=1)
    .rename(columns={'soccode':'new_occ_2000'}))

输出:

    OCC_1988    DIST  YEAR  COW  EST_LEV new_occ_2000
0          0  100.00  1988  NaN        4          NaN
1      10000    5.83  1988  3.0        4      11-3041
2      13002    0.28  1988  3.0        4      11-2022
3      13005    0.16  1988  3.0        4      11-2031
4      13008    0.06  1988  3.0        4      11-3011
5      13011    0.38  1988  3.0        4      11-2011
6      13014    0.39  1988  3.0        4      11-2021
7      13017    0.16  1988  3.0        4      11-3021
8      15017    0.22  1988  3.0        4      11-3031
9      15023    1.96  1988  3.0        4      11-1031
10     19005    1.30  1988  3.0        4      11-1011
11     19005    1.30  1988  3.0        4      11-1021