我有 2 个数据框,单元格中有字符串:
df1
ID t1 t2 t3
0 x1 y1 z1
1 x2 y2 z2
2 x3 y3 z3
3 x4 y4 z4
4 x1 y5 z5
df2
ID t1 t2 t3
0 x3 y3 z3
1 x4 y4 z4
2 x1 y1 z1
3 x2 y2 z2
4 x1 y7 z5
我发现我可以比较行中的差异:
#exactly the same t1, t2, and t3
pd.merge(df1, df2, on=['t1', 't2', 't3'], how='inner')
这将找到行之间的精确匹配(其中 df1 中的 t1 等于 df2 中的 t1,等等)。
如何找到特定列的 2 个数据帧之间的半匹配?也就是说,除了完全匹配之外,只有指定列可能存在差异?例如,如果我指定 t2
,匹配将是 t1 in df1 = t1 in df2
, t2 in df1 != df2
, df1 中的 t3 = df3 中的 t3
(例如,2 个数据帧中的行 ID=4
除了完全匹配外还将匹配此值)。
更新 1:
似乎很多答案都考虑了顺序(如果行不完全对齐,该方法将失败)。
尝试以下检查您的方法:
d1 = {'Entity1': ['x1', 'x2','x3','x4','x1', 'x6', 'x1'], 'Relationship': ['y1', 'y2','y3','y4','y5','y6', 'y9'], 'Entity2': ['z1', 'z2','z3','z4','z5','z6', 'z5']}
df1 = pd.DataFrame(data=d1)
d2 = {'Entity1': ['x3', 'x4','x1','x2','x6','x1'], 'Relationship': ['y3', 'y4','y1','y2','y6','y7'], 'Entity2': ['z3', 'z4','z1','z2','z7','z5']}
df2 = pd.DataFrame(data=d2)
注意精确匹配之一是x2, y2, z2
,半匹配之一是df1 = x1, y5, z5
, df2 = x1, y7,z5
最佳答案
您可以合并两个数据框,然后过滤两边 t1 和 t2 相同的所有行:
df3 = pd.merge(df1, df2, left_index=True, right_index=True)
df3[(df3["t1_x"] == df3["t1_y"]) & (df3["t3_x"] == df3["t3_y"])]
关于python - 比较 2 个 DataFrame 的半匹配行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69056031/