У меня проблема с одной задачей. У меня есть список значений, который выглядит следующим образом:
values = ["a","b","c"]
и мой DF выглядит следующим образом:
column_1 column_2
1 sffasdef
2 bsrewsaf
3 tyhvbsrc
4 ertyui1c
5 qwertyyu
Я должен проверить, существует ли одно из значений в списке в столбце 2. Если есть, в новом столбце он должен возвращать результат и следующие 3 элемента, поэтому DF должен выглядеть следующим образом:
column_1 column_2 column_3
1 sffasdef asde
2 bsrewsaf bsre
3 tyhvbsrc bsrc
4 ertyui1c c
5 qwertyyu NaN
У вас есть идеи, как это решить? С уважением
Используйте .str.extract
:
df['column_3'] = df['column_2'].str.extract(f'((?:{"|".join(values)})(?:.?){{3}})')
# OR, possibly more readable
values_re = '|'.join(values)
df['column_3'] = df['column_2'].str.extract(r'((?:' + values_re + ')(?:.?){3})')
Выход:
>>> df
column_1 column_2 column_3
0 1 sffasdef asde
1 2 bsrewsaf bsre
2 3 tyhvbsrc bsrc
3 4 ertyui1c c
4 5 qwertyyu NaN
Предполагая, что у вас есть отдельные символы в values
:
df['column_3'] = df['column_2'].str.extract(fr'([{"".join(values)}].{{,3}})')
выход:
column_1 column_2 column_3
0 1 sffasdef asde
1 2 bsrewsaf bsre
2 3 tyhvbsrc bsrc
3 4 ertyui1c c
4 5 qwertyyu NaN