#pandas
#pandas
Вопрос:
У меня есть фрейм данных со столбцом ( colD
), созданным из ключевых слов, извлеченных из другого столбца ( colC
). Я использовал список, содержащий все ключевые слова (‘abc’, ‘xyz’, ‘efg’, ‘rst’), но если ключевое слово не появляется в colC
, оно не записывается в colD
. Ключевые слова также могут существовать или не существовать в двух других столбцах ( colA
и colB
). Мне интересно, есть ли способ добавить значения, если есть какие-либо из colA
и / или colB
, в соответствующий список в colD
, если они еще не существуют в списке?
Текущее состояние:
colA colB colC colD
0 abc NaN hi there:abc [abc]
1 xyz NaN blahblahblah []
2 efg rst text rst text [rst]
Желаемый результат:
colA colB colC colD
0 abc NaN hi there:abc [abc]
1 xyz NaN blahblahblah [xyz]
2 efg rst text rst text [rst, efg]
Комментарии:
1. Что вы пробовали до сих пор?
2. Я более внимательно изучил свои данные, и на самом деле для каждого идентификатора есть несколько строк, и если в любом из них есть ключевое слово
colA
илиcolB
, оно также существует по крайней мере в одной из записей для этого идентификатора вcolC
и было записано вcolD
. Итак, вышесказанное больше не является проблемой для меня, но я столкнулся с другим. Рассмотрю это снова, как только решу свою новую проблему.
Ответ №1:
IIUC, сначала stack
со столбцами, которые вы хотите добавить в list
, затем groupby
level
и получите list
s=df[['colA','colB']].stack().groupby(level=0).apply(list)
#here using the set get the different and adding the different back the colD
df.colD=[y list(set(x)-set(y))for x , y in zip(s,df.colD)]
df
Out[118]:
colA colB colD
0 abc NaN [abc]
1 xyz NaN [xyz]
2 efg rst [rst, efg]
Комментарии:
1. Хотя этот код может отвечать на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, улучшает его долгосрочную ценность.
2. @Wen-Ben Это здорово! Я разбираю ваш ответ, чтобы лучше понять его. Вы знаете, почему операция set выводит значения в фигурных скобках? Например,
set(['efg', 'rst']) - set(['rst'])
дает{'efg'}
.3. @lauren.he set subtract возвращает набор {} это означает, что вы всегда можете преобразовать список с помощью list({111,222})
4. @Wen-Ben Совершенно забыл, что наборы используют фигурные скобки. Думал, что это зарезервировано для словарей, и запутался. Спасибо!