问题描述
我有两个数据帧df1
和df2
。我正在使用下面的代码行在df1['comment']
中搜索df2['label']
中的部分字符串,该代码将返回一个具有True / False值的新列df1['match']
。
df1['match'] = df1['comment'].str.contains('|'.join(df2['label'].values),na=False)
现在,我不仅想要True / False df1['match']
列,还希望显示在df2['label']
中找到来自df1['match']
的部分字符串中的哪一列。我尝试使用类似的
if df1['comment'].str.contains('|'.join(df2['label'].values),na=False) == True:
df1['label_item'] = df2['label'].values
但是它似乎不起作用。我还觉得编写if条件可能不是正确的选择,并且可能存在某种捷径可以解决这个问题。
非常感谢您的帮助!
解决方法
我认为您需要Series.str.findall
和Series.str.join
:
df1['label_item'] = df1['comment'].str.findall(f'({"|".join(df2.label)})').str.join(',')