проверить, содержит ли столбец какую-либо строку из списка - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь использовать any (), чтобы проверить, содержит ли столбец какую-либо строку из списка, и создать новый столбец с соответствующими результатами.

df_data = pd.DataFrame({'A':[2,1,3], 'animals': ['cat, frog', 'kitten, fish', 'frog2, fish']})
cats = ['kitten', 'cat']
df_data['cats'] = df_data.apply(lambda row: True if any(item in cats for item in row['animals']) else False, axis = 1)

Я получил эти результаты, и я не понимаю,почему это False для первых двух строк:

   A       animals   cats
0  2     cat, frog  False
1  1  kitten, fish  False
2  3   frog2, fish  False

Я ожидаю получить False только для последней строки

Ответы [ 2 ]

1 голос
/ 02 мая 2019

С пандами вы должны стараться изо всех сил, не используя для цикла или применить, я использую DataFrame конструктор с isin и any

df_data['cats']=pd.DataFrame(df_data.animals.str.split(', ').tolist()).isin(cats).any(1)
df_data
   A       animals   cats
0  2     cat, frog   True
1  1  kitten, fish   True
2  3   frog2, fish  False
0 голосов
/ 02 мая 2019

Переверните свои итерации

df_data['cats'] = df_data.apply(lambda row: True if any([item in row['animals'] for item in cats]) else False, axis = 1)

print(df_data)
#    A       animals   cats
# 0  2     cat, frog   True
# 1  1  kitten, fish   True
# 2  3   frog2, fish  False

Если вы присмотритесь

item in row['animals'] for item in cats

будет перебирать cats и проверять, находится ли элемент в row['animals']

item in cats for item in row['animals']

будет перебирать row['animals'] и проверять, есть ли значение row['animals'] в списке котов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...