繁体   English   中英

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

[英]Return value from other dataframe from partial string match

我正在尝试创建一个新的数据框列,该列与另一个数据框的部分字符串匹配。 我将如何做以下示例?

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'])

谢谢!

有多种方法可以实现此目的。

如果您能够从ref列中提取id ,就像在此特定示例中那样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进行排序并递归合并它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM