如何按其他数据框对一列的值进行分类?

时间:2017-11-23 00:41:28

标签: python pandas numpy

我正在尝试根据标准数据框对一个数据进行分类。 像df1这样的标准,我想根据df1对df2进行分类。

df1:
PAUCode     SubClass
1           RA
2           RB
3           CZ

df2:
PAUCode     SubClass
2           non      
2           non
2           non
3           non
1           non
2           non
3           non

我想得到如下的df2:

expected result:

PAUCode     SubClass
2           RB      
2           RB
2           RB
3           CZ
1           RA
2           RB
3           CZ

2 个答案:

答案 0 :(得分:4)

选项1
fillna

df2 = df2.replace('non', np.nan)

df2.set_index('PAUCode').SubClass\
       .fillna(df1.set_index('PAUCode').SubClass)

PAUCode
2    RB
2    RB
2    RB
3    CZ
1    RA
2    RB
3    CZ
Name: SubClass, dtype: object

选项2
map

df2.PAUCode.map(df1.set_index('PAUCode').SubClass)

0    RB
1    RB
2    RB
3    CZ
4    RA
5    RB
6    CZ
Name: PAUCode, dtype: object

选项3
merge

df2[['PAUCode']].merge(df1, on='PAUCode')

   PAUCode SubClass
0        2       RB
1        2       RB
2        2       RB
3        2       RB
4        3       CZ
5        3       CZ
6        1       RA

请注意,数据的顺序会发生变化,但答案仍然相同。

答案 1 :(得分:2)

让我们使用reindex

df1.set_index('PAUCode').reindex(df2.PAUCode).reset_index()
Out[9]: 
   PAUCode SubClass
0        2       RB
1        2       RB
2        2       RB
3        3       CZ
4        1       RA
5        2       RB
6        3       CZ