熊猫,找到字符串列表和df列值(作为列表)之间的匹配项(任意)以创建新列?

时间:2019-08-13 18:58:17

标签: python pandas

我有一个字符串列表。我需要遍历数据框的行以尝试查找一列(字符串)的值中是否包含任何或多个列表项。我试图找到任何列表项和数据框列值之间的子字符串匹配。然后,我需要将匹配的值分配给新列,如果没有匹配项,则通过NaN。不仅是字符串,而是所有匹配的部分。因此,在我df的第三行中,它们分别是“ E”和“ F22”。

df = pd.DataFrame({'type':['A23 E I28','I28 F A23', 'D41 E F22']})
matches = ['E', 'F22']

2 个答案:

答案 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