在列中查找特定值并取其旁边的几个下一个元素

Find a specific values in column and take few next elements that are next to it

我有一个任务有问题。我有一个如下所示的值列表:

values = ["a","b","c"]

我的 DF 如下所示:

column_1 column_2
1        sffasdef
2        bsrewsaf
3        tyhvbsrc
4        ertyui1c
5        qwertyyu

我必须检查第 2 列中是否存在列表中的值之一。如果存在,在新列中它应该 return 结果和接下来的 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