在Python中根据列表和字典对多列进行编码

时间:2018-08-27 11:43:19

标签: python pandas

我在熊猫中有以下数据框

 OfferPreference_A  OfferPreference_B   OfferPreference_C   
            A          B                  A                  
            B          C                  C                 
            C          S                  G  

我在所有列下都有以下唯一值的字典

  dict1={A:1, B:2, C:3, S:4, G:5, D:6}

我也有一个列名列表

  columnlist=['OfferPreference_A', 'OfferPreference_B', 'OfferPreference_C']

我正在尝试获取下表作为输出

    OfferPreference_A   OfferPreference_B   OfferPreference_C   
               1           2                  1                  
               2           3                 3                  
               3           4                  5  

我该怎么做。

2 个答案:

答案 0 :(得分:3)

使用:

#if value not match get NaN
df = df[columnlist].applymap(dict1.get)

或者:

#if value not match get original value
df = df[columnlist].replace(dict1)

或者:

#if value not match get NaN
df = df[columnlist].stack().map(dict1).unstack()

print (df)
   OfferPreference_A  OfferPreference_B  OfferPreference_C
0                  1                  2                  1
1                  2                  3                  3
2                  3                  4                  5

答案 1 :(得分:1)

您可以使用map,如下所示,假设值始终匹配

for col in columnlist:
    df[col] = df[col].map(dict1)