#python #pandas
#python #панды
Вопрос:
Я пытаюсь найти список значений в серии Pandas и записать совпадения в новый столбец.
входные данные:
vals = ['john', 'jane']
col1
john doe
jane doe
billy j.
желаемый результат:
col1 col2
john doe john
jane doe jane
billy j. nan
Я старался держаться подальше от циклов for и делать это с помощью методов Pandas, но не смог получить результат.
С помощью приведенного ниже голого кода python я могу распечатать совпадения, но не могу записать их в соответствующие строки в col2. Кроме того, это, очевидно, неэффективно для больших наборов данных.
for i in vals:
for j in df.col1:
if i in j:
print("matcht", i,'in:t',j)
else:
print('-')
output:
match john in: john doe
-
-
-
match jane in: jane doe
-
Любая помощь будет признательна.
Комментарии:
1. И каков желаемый результат, если в строке несколько совпадений? например, col1, содержащий значение
jane john doe
2. В идеале все совпадения с разделителем между ними.
Ответ №1:
Вот вариант, который также может обрабатывать несколько значений val в строке, объединяя их с помощью запятой:
df['col2'] = df.col1.apply(lambda x: ','.join([v for v in vals if v in x])).replace('', np.nan)
Вывод:
col1 col2
0 john doe john
1 jane doe jane
2 billy j. NaN
Другой вариант с использованием pandas.Series.findall
:
pat = '|'.join(vals)
df['col2'] = df.col1.str.findall(pat).apply(','.join)