我想匹配来自2个数据帧的字符串,如果匹配,则返回相应的结果。所以我的第一个数据帧包含:
Name
abc
pqr
xyz
第二个数据帧包含
Id Name
1 abc
2 lmn
3 pqr
4 qwe
我想通过比较(字符串)名称列来返回ID。另外,如果实现相同的,如果来自abc的Name将与来自dataframe 2的整个名称进行比较。
我在梳理2个数据帧后尝试的代码如下:这是一个比较字符串和返回差异的函数。
def bit_func(x):
dmp = diff_match_patch()
patches = dmp.patch_make(x.Name1, x.Name2)
diff = dmp.patch_toText(patches)
return diff
我试图改变,但代码不起作用。而且我还想要相应的ID名称如何返回相同?
df['diff'] = df.apply(bit_func, axis=1)
你可以使用pandas merge功能来显示DataFrames和与它们相关的ID之间的匹配:
import pandas as pd
df1 = pd.DataFrame({'Name': ['abc', 'pqr', 'xyz']})
df2 = pd.DataFrame({'Name': ['abc', 'lmn', 'pqr', 'qwe'], 'Id': [1, 2, 3, 4]})
print(df1.merge(df2))
输出是:
Name Id
0 abc 1
1 pqr 3
要获得两者之间的区别,请使用以下内容:
df1.merge(df2, how='outer', indicator=True).query('_merge != "both"').drop('_merge', 1)
哪个输出:
Name Id
2 xyz NaN
3 lmn 2.0
4 qwe 4.0
对所有合并查询引用此post