Создайте сводную переменную, получая результаты проверки нескольких переменных по нескольким спискам в словаре в Pandas / Python - PullRequest
0 голосов
/ 20 сентября 2018
DXCODE1     DXCODE2     DXCODE3
A1          A2          B2
C2          D3          NaN
B2          C2          A1

DXCODE_DICTIONARY = {'Code_Apple':['A1', 'A2', 'A3', 'A4'],
    'Code_Banana':['B1', 'B2', 'B3'],
    'Code_Cat':['C1', 'C2', 'C3']}

DXCODE1     DXCODE2     DXCODE3         DXCODE_SUMMARY
A1          A2          B2              ['Apple', 'Apple', 'Banana']
C2          D3          NaN             ['Cat']
B2          C2          A1              ['Banana', 'Cat', 'Apple']

Выше описана задача, которую я пытаюсь решить в Пандах.В df у меня есть три переменные DXCODE.Моя конечная цель - создать переменную DXCODE_SUMMARY для суммирования DXCODE1 в DXCODE3.Для каждой строки я хочу проверить три переменные.Например, для DXCODE1 я хочу проверить его по DXCODE_DICTIONARY, если он находится в списке «Code_Apple», я хочу пометить его «Apple» (производный от ключа словаря), тогда он будет проверять по списку«Code_Banana», если он находится в списке, я хочу, чтобы «Banana» был добавлен в список в DXCODE_SUMMARY.Как только DXCODE1 проверен по всем спискам в DXCODE_DICTIONARY, то же самое будет сделано для DXCODE2, затем для DXCODE3.

Изменения: добавлено «A4» в список «Code_Apple».

1 Ответ

0 голосов
/ 20 сентября 2018

Попробуйте изменить dict, тогда мы сделаем map и groupby apply с list

dictdf=pd.DataFrame(DXCODE_DICTIONARY).melt()
newdict=dict(zip(dictdf.value,dictdf.variable))

df.apply(lambda x : x.map(newdict)).stack().groupby(level=0).apply(list)
Out[1005]: 
0    [Code_Apple, Code_Apple, Code_Banana]
1                               [Code_Cat]
2      [Code_Banana, Code_Cat, Code_Apple]
dtype: object
...