Найти элементы в одном списке, но не в другом в столбце данных pandas. - PullRequest
0 голосов
/ 10 марта 2020

Я все время захожу в тупик, и это убивает меня.

Фрейм данных:

accountid    col2                 col3
1            ['abc','def','xyz']  ['abc','mda','xyz','sdi']
2            ['abc','asd','xyz','dib]  ['nio','ouy','abc']
3            ['abc','def','xyz']  ['abc','mda','xyz']

Примечания

* каждое поле в столбцах col2 и col3 - это списки

* поля в столбцах col2 и col3 могут не иметь одинакового количества элементов в списке не в и col2:

accountid    col2                      col3                        col4
1            ['abc','def','xyz']       ['abc','mda','xyz','sdi']   ['mda','sdi']
2            ['abc','asd','xyz','dib]  ['nio','ouy','abc']         ['nio','ouy']
3            ['abc','def','xyz']       ['abc','mda','xyz']         ['mda']

Дайте мне знать, если это не имеет смысла. Я ценю любую помощь в этом.

Ответы [ 2 ]

3 голосов
/ 10 марта 2020

Давайте сделаем

s=df.col3.apply(set)-df.col2.apply(set)
0    {sdi, mda}
1    {nio, ouy}
2         {mda}
dtype: object
df['New']=s.map(list)

Проверьте результат

s.map(list)
0    [sdi, mda]
1    [nio, ouy]
2         [mda]
dtype: object

Ваш список не список, это строка

import ast
df.iloc[:,1:]=df.iloc[:,1:].applymap(ast.literal_eval)
1 голос
/ 10 марта 2020

Попробуй это. Применить лямбда-функцию вдоль столбца axis=1

df['col4'] = df.apply(lambda x : list(set(x['col3']).difference(set(x['col2']))), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...