python - 比较 2 个 DataFrame 的半匹配行

标签 python dataframe

我有 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/

相关文章:

python - sys.maxunicode 是什么意思?

python - 在 Python 中按属性分隔列表元素

python - 从 shell 运行 python 时如何避免打印不必要的信息?

regex - 用R中的数据帧中的正则表达式检测单词边界

python - Pandas 如果完整的字符串包含在另一个 Pandas 数据框中

python - 在多个 python 脚本之间共享变量(文件中的数据),且未加载重复项

python - rpy2 和 R 调试

python - 如何将df的每一列转换成字典

python - 通过在数据框的所有单元格上应用函数来创建新的数据框

Python 数据帧 : Seperate rows based on custom condition?