2017-04-21 2 views
3

동일한 사전을 사용하여 하나의 새 열에 매핑하려는 두 개의 열이 있으며 사전에 일치하는 키가 없으면 0을 반환합니다.pandas : 여러 열을 하나의 열로 매핑

>> codes = {'2':1, 
      '31':1, 
      '88':9, 
      '99':9} 

>> df[['driver_action1','driver_action2']].to_dict()  
{'driver_action1': {0: '1', 
    1: '1', 
    2: '77', 
    3: '77', 
    4: '1', 
    5: '4', 
    6: '2', 
    7: '1', 
    8: '77', 
    9: '99'}, 
'driver_action2': {0: '31', 
    1: '99', 
    2: '31', 
    3: '55', 
    4: '1', 
    5: '5', 
    6: '99', 
    7: '2', 
    8: '4', 
    9: '99'}} 

나는 내가 단지 수 있다고 생각 :

>> df['driver_reckless_remapped'] = df[['driver_action1','driver_action2']].applymap(lambda x: codes.get(x,0)) 

예상 출력 :

driver_action1 driver_action2 driver_reckless_remapped 
0    1    31       1 
1    1    99       9 
2    77    31       1 
3    77    55       0 
4    1    1       0 
5    4    5       0 
6    2    99       1 
7    1    2       1 
8    77    4       0 
9    99    99       9 

하지만 그 대신 내가 얻을 :

TypeError: ("'dict' object is not callable", 'occurred at index driver_action1') 

매핑 할 방법은 없습니다 여러 열을 하나의 새로운 열로?

답변

4

IIUC 당신이 combine_first() 방법을 사용할 수 있습니다

df['new'] = = \ 
    df.driver_action1.map(codes).combine_first(df.driver_action2.map(codes)).fillna(0) 

확인 :

In [106]: df['new'] = df.driver_action1.map(codes).combine_first(df.driver_action2.map(codes)).fillna(0) 

In [107]: df 
Out[107]: 
    driver_action1 driver_action2 driver_reckless_remapped new 
0    1    31      1 1.0 
1    1    99      9 9.0 
2    77    31      1 1.0 
3    77    55      0 0.0 
4    1    1      0 0.0 
5    4    5      0 0.0 
6    2    99      1 1.0 
7    1    2      1 1.0 
8    77    4      0 0.0 
9    99    99      9 9.0 
+0

이 좋은 작품, 감사합니다! – ale19

+0

@ ale19, 환영합니다 :) – MaxU

+0

두 개 이상의 열을 사용하는 경우에는 작동하지 않는 것 같습니다. 3 열을 사용하는 예를 사용하여 더 많은 내용을 내 게시물에 추가했습니다. – ale19

관련 문제