从部分字符串匹配返回其他数据帧的值

时间:2015-09-29 20:45:22

标签: python pandas

我正在尝试创建一个新的数据帧列,它是来自另一个数据帧的部分字符串匹配。我将如何进行以下示例?

df1:
#   id
1   666666
2   666667
3   666668
4   666667

df2
#   ref
1   ref_666666_blah blah
2   ref_666667_blah blah
3   ref_666668_blah blah
4   ref_666667_blah blah

df3 #what I want
#   id      match
1   666666  ref_666666_blah blah
2   666667  ref_666667_blah blah
3   666668  ref_666668_blah blah
4   666667  ref_666667_blah blah

我知道这不是代码,但我正在尝试执行以下操作:

df1['match'] = df2['ref'].map(lambda x: x if x.str.contains(df1['match'])

谢谢!

1 个答案:

答案 0 :(得分:1)

有很多方法可以实现这一目标。

如果您能够从id列中提取ref,就像df2[id] = df2.ref.apply(lambda c: c.split('_')[1])在此特定示例中一样,您可以继续df1.join(df2, on = 'id')

如果您需要调用一些更复杂的匹配功能,您可以执行以下操作:

def getMatch(str_id):
    matches = (c for c in df2['ref'] if str_id in c)
    try:
        return matches.next()
    except:
        return None

df1['match'] = df1['id'].apply(getMatch)

这将导致许多冗余比较,因此您应该考虑数据中是否存在可以简化匹配的关系。例如,如果每个ref与最多一个id匹配,或者如果你能以某种方式对两个DataFrame进行有意义的排序并以递归方式合并它们。