#python #python-3.x #pandas
#python #python-3.x #pandas
Вопрос:
fruit_type = ['Apple','Banana','Cherries','Dragonfruit']
for row in df['sentence']:
sentence['fruit_type'] = df['sentence'].str.extract("(" "|".join(fruit_type) ")", expand=False)
Результат приведенного выше кода:
df
sentence | fruit_type
here is an apple | apple
here is a banana, an apple | banana
here is an orange, a banana | orange
Как мне пересмотреть код, чтобы при наличии более 1 типа фруктов в df['sentence']
, df['fruit_type']
возвращался NaN?
Ответ №1:
Вместо extract
вы можете использовать exctractall
в сочетании с groupby
и apply
:
Во-первых, чтобы получить все совпадения:
df['sentence'].str.extractall("(" "|".join(fruit_type) ")")
0
match
0 0 apple
1 0 banana
1 apple
2 0 banana
Обратите внимание, что есть pandas.MultiIndex
.
Затем, используя .groupby(level=0)[0].apply(list)
, вы получите:
0 [apple]
1 [banana, apple]
2 [banana]
И, наконец, после использования .apply(lambda x: x[0] if len(x) == 1 else np.nan)
:
0 apple
1 NaN
2 banana