嗨,我有一个列表和一个数据框。我想根据列表中的匹配项创建一个新列。
我能够运行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
这实际上是我现在返回的结果。 预先感谢。
答案 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