Python-在数据框列中搜索值列表,将涉及其他列的操作结果追加到列表中

时间:2018-07-30 17:23:30

标签: python regex pandas

我有一个字符串列表,像这样:

m = ['First Officer', 'Executive Officer']

还有像这样的Pandas数据框:

d = {'match': ['and', 'first'], 'use': ['&', '1st']}
df = pd.DataFrame(data=d)

我想为re.search中的每个子字符串m中的每个字符串df.match,并在存在匹配项时,附加{{的re.sub} 1}}和m[i]分别用于df.match[i]df.use[i]

预期输出为:

m

最快的实现是什么?

1 个答案:

答案 0 :(得分:0)

创建一个帮助函数来处理替换:

def helper(mtch):
     return df.loc[df.match.eq(mtch.group().lower()), 'use'].values[0]

然后对 re.sub 使用列表推导:

[
    re.sub(r'|'.join(df.match.values), lambda x: helper(x), i, flags=re.I)
    for i in m
]
# ['1st Officer', 'Executive Officer']

如果您真的也想要原件:

set(m + [re.sub(r'|'.join(df.match.values), lambda x: helper(x), i, flags=re.I) for i in m])
# {'1st Officer', 'Executive Officer', 'First Officer'}

我个人认为,通过使用字典而不是数据框来完成此操作会更容易,这可以使查找更加容易:

dct = dict(df.values)
# {'and': '&', 'first': '1st'}

[
    re.sub(r'|'.join(dct.keys()),
    lambda x: dct[x.group().lower()], i, flags=re.I)
    for i in m
]
# ['1st Officer', 'Executive Officer']