Как проверить, имеет ли столбец Pandas значение из списка строк? - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть фрейм данных и список

df = pd.DataFrame({'IDs':[1234,5346,1234,8793,8793],
                    'Names':['APPLE ABCD ONE','APPLE ABCD','NO STRAWBERRY YES','ORANGE AVAILABLE','TEA AVAILABLE']})

kw = ['APPLE ABCD', 'ORANGE', 'LEMONS', 'STRAWBERRY', 'BLUEBERRY', 'TEA COFFEE']

Я хочу создать новый столбец flag, такой, что если в столбце Names содержится ключевое слово из kw, флаг будет равен 1, иначе 0.

Ожидаемый результат:

    IDs     Names               Flag
0   1234    APPLE ABCD ONE      1
1   5346    APPLE ABCD          1
2   1234    NO STRAWBERRY YES   1
3   8793    ORANGE AVAILABLE    1
4   8793    TEA AVAILABLE       0

Я могу получить вывод, используя следующий код:

ind=[]
for idx, value in df.iterrows():
    x = 0
    for u in kw:
        if u in value['Names']:
            ind.append(True)
            x = 1
            break
    if x == 0:
        ind.append(False)

df['flag'] = ind

Есть ли альтернативный способ избежать цикла и сделать егоэффективнее?

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Вы можете использовать функцию isin панд

df['Names'].isin(kw)
0 голосов
/ 17 ноября 2018

Используйте apply и lambda как:

df['Names'].apply(lambda x: any([k in x for k in kw]))

0     True
1     True
2     True
3     True
4    False
Name: Names, dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...