[英]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.