python - 如何使用python比较两个数据框并获取不匹配的行?
问题描述
我有两个数据框,df1 和 df2。现在,df1 包含 6 条记录,df2 包含 4 条记录。我想从中获得无与伦比的记录。我试过了,但得到一个错误ValueError: Can only compare identically-labelled DataFrame objects
我猜这是由于 df 的长度,因为 df1 有 6 而 df2 有 4 但我如何比较它们并获得不匹配的行?
代码
df1=
a b c
0 1 2 3
1 4 5 6
2 3 5 5
3 5 6 7
4 6 7 8
5 6 6 6
df2 =
a b c
0 3 5 5
1 5 6 7
2 6 7 8
3 6 6 6
index = (df != df2).any(axis=1)
df3 = df.loc[index]
这使:
ValueError: Can only compare identically-labelled DataFrame objects
预期输出:
a b c
0 1 2 3
1 4 5 6
我知道错误是由于长度引起的,但是有什么方法可以比较两个数据帧并从中获取不匹配的记录?
解决方案
MultiIndex.from_frame
+isin
我们可以MultiIndex.from_frame
在两者上使用df1
并df2
创建相应的多索引,然后用于isin
测试从df1
in index
created from创建的索引的成员资格,df2
以创建一个布尔掩码,然后可以使用该掩码过滤不匹配的行。
i1 = pd.MultiIndex.from_frame(df1)
i2 = pd.MultiIndex.from_frame(df2)
df1[~i1.isin(i2)]
结果
a b c
0 1 2 3
1 4 5 6
推荐阅读
- javascript - 配置 webpack 以将 _ 解析为 lodash 索引
- ruby-on-rails - 如何将两个不同模型的 ID 传递给一个新模型?
- python - 引用满足特定条件的 np.array 元素的最快方法
- php - 高级自定义字段 update_value 未触发
- mlt - mlt: why is dynamictext working, but not text or qtext?
- gpu - 如何不并行化 OpenACC 中的内部循环
- dialogflow-es - 使用多个 DialogFlow 的 Webhook 查询 Google Cloud 外部的 API 端点
- javascript - Socket.io - 有人可以冒充另一个套接字 id 吗?
- c# - 如何使用 LINQ 查询将 SQL 连接与集合展平?
- python - NGINX Unit + Flask = 在可用的应用程序模块中找不到