我有一个字符串列表。我需要遍历数据框的行以尝试查找一列(字符串)的值中是否包含任何或多个列表项。我试图找到任何列表项和数据框列值之间的子字符串匹配。然后,我需要将匹配的值分配给新列,如果没有匹配项,则通过NaN。不仅是字符串,而是所有匹配的部分。因此,在我df的第三行中,它们分别是“ E”和“ F22”。
df = pd.DataFrame({'type':['A23 E I28','I28 F A23', 'D41 E F22']})
matches = ['E', 'F22']
答案 0 :(得分:1)
这是您要找的吗?
如果有匹配项,则将关键字分配给新的列
df['new_col'] = df['type'].str.extract(f"({'|'.join(matches)})")
type new_col
0 A23 E I28 E
1 I28 F A23 NaN
2 D41 E F22 E
编辑:
df['new_col'] = (df['type']
.str.findall(f"({'|'.join(matches)})")
.str.join(', ')
.replace('', np.nan))
type new_col
0 A23 E I28 E
1 I28 F A23 NaN
2 D41 E F22 E, F22
答案 1 :(得分:0)
我会这样:
df["match"] = df.type.map(lambda s: "".join(set(s).intersection(matches)))
df.loc[~df.type.str.contains("|".join(matches)), "match"] = np.nan