#python #pandas #string #list #dataframe
Вопрос:
У меня есть следующие Панды, которые называются pro
:
property name
0 too Deliveroo
1 bar Gousto
2 baz Gousto
3 foobar Deliveroo
4 too Gousto
5 foobaz Deliveroo
При применении следующего кода:
property = pro.groupby('name')['property'].apply(list).reset_index(name='property')
Я получаю собственность df:
name property
0 Deliveroo [too,foobar,foobaz]
1 Gousto [bar,baz,too]
Я хотел бы проверить, совпадают ли элементы из списка с любым из списков в property['property']
столбце, например
check = ['bar']
Следует найти «полосу» в строке 1 df.
check = ['bar','baz']
Следует найти «бар» и «баз» в строке 1 df.
check = ['too']
Следует найти «слишком» в строках 0 и 1 df.
check = ['foobar']
Следует найти «foobar» в строке 0 df.
Я знаю, что могу перебрать все элементы property['property']
(которые относятся к типу списков) и сопоставить их со check
списком, но я хотел бы сделать это с помощью эффективного метода Pandas. Я пытался .isin
, но в данном случае у меня ничего не получается.
Конечный результат должен позволить использовать check
список для фильтрации property
df.
Комментарии:
1. пожалуйста, добавьте свой ожидаемый результат
Ответ №1:
Вы можете использовать set
, а затем найти пересечение между значениями фрейма данных и списком:
>>> prop = pro.groupby('name')['property'].apply(list).reset_index(name='property')
>>> prop['property'].apply(lambda x: set(x).intersection(['bar']))
0 {}
1 {bar}
Name: property, dtype: object
>>> prop['property'].apply(lambda x: set(x).intersection(['bar', 'baz']))
0 {}
1 {baz, bar}
Name: property, dtype: object
>>> prop['property'].apply(lambda x: set(x).intersection(['too']))
0 {too}
1 {too}
Name: property, dtype: object
Порядок может не поддерживаться во время использования set
, но я не думаю, что это вызывает беспокойство здесь. И будет еще лучше, если вы преобразуете эти значения в set
после их группировки, а не в список.
Кстати, не используйте property
для имени переменной, это оболочка, которая используется для определения атрибутов свойств класса.
Комментарии:
1. Привет, я пока не могу проголосовать, но ваше решение послужило хорошей отправной точкой. Кроме того, спасибо за информацию об опасностях использования свойства для имени переменной