从每行具有多个macthe的条件创建列

时间:2020-06-07 08:41:50

标签: python pandas list dataframe

嗨,我有一个列表和一个数据框。我想根据列表中的匹配项创建一个新列。

我能够运行str.extract来找到匹配项,但是它只列出第一个匹配项,然后移到下一行。如何使每一行中的所有匹配项都显示出来?

my list = ['a', 'b', 'c']

existing_col
   a b
   a c

df2['new_col'] = df2['existing_col'].str.extract(f'({"|".join(my_list)})', expand=False) 

existing_col    new_col
   a b            a 
   a b            c 

这实际上是我现在返回的结果。 预先感谢。

1 个答案:

答案 0 :(得分:1)

Series.str.findall用于列表的所有匹配项:

print (df2)
  existing_col
0      a b d c
1      a c e q

my_list = ['a', 'b', 'c']

df2['new_col'] = df2['existing_col'].str.findall(f'({"|".join(my_list)})') 
print (df2)
  existing_col    new_col
0      a b d c  [a, b, c]
1      a c e q     [a, c]

如果需要输出,例如连接字符串,例如通过,分隔符添加Series.str.join

df2['new_col'] = df2['existing_col'].str.findall(f'({"|".join(my_list)})').str.join(',') 
print (df2)
  existing_col new_col
0      a b d c   a,b,c
1      a c e q     a,c