python - 返回一个 DataFrame 与另一个 DataFrame 中不同的行
问题描述
有很多类似的问题,但没有一个对我有帮助,所以我假设我的版本有细微差别,我错过了。
我有两个DataFrame:df1、df2(具有相同的维度,我可以在唯一列上映射1-2-1,即名称)并且我想要df1中存在的所有行并且与df2中的相应行不同。我尝试了更优雅的解决方案,涉及 .isin() 和使用循环的丑陋解决方案。但没有什么能返回正确的解决方案。我在下面发布了一个较少 Pythonic 的解决方案,因为我相信它显示了我最明确地尝试做的事情:
df1['hash'] = df1[common_fields].apply(lambda x: hash(tuple(x)), axis=1)
df2['hash'] = df2[common_fields].apply(lambda x: hash(tuple(x)), axis=1)
df = pd.DataFrame(columns=df1.columns)
df2_hashes = df2['hash'].tolist()
for i in range(len(df1)):
if not df1['hash'].iloc[i] in df2_hashes:
df = df.append(df1.iloc[i])
注意。上述尝试,返回所有行,无论是否不同。
解决方案
df1 中的每一行都与 df2 中的相应行不同。
import pandas as pd
d1 = {'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 500],
'C': [100, 200, 300, 400, 500]}
d2 = {'A': [1, 2, 3, 4, 5],
'B': [10, 22, 30, 44, 500],
'D': [100, 200, 300, 400, 500]}
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)
df = df1[~((df1['A'] == df2['A']) & (df1['B'] == df2['B']))]
In [321]: df1
Out[321]:
A B C
0 1 10 100
1 2 20 200
2 3 30 300
3 4 40 400
4 5 500 500
In [322]: df2
Out[322]:
A B D
0 1 10 100
1 2 22 200
2 3 30 300
3 4 44 400
4 5 500 500
输出
In [330]: df
Out[330]:
A B C
1 2 20 200
3 4 40 400
推荐阅读
- android - 如何复制此 UI 行为
- r - 如何创建变量记录组中的任何成员是否具有 R 中的特征?
- qt - 如何防止将 QChartView 缩放为负 x 或 y 轴值
- python - 在嵌入 discord.py 中发送图像
- json - 在flutter中解析具有空键的JSON数据
- r - ggplot2 创建多个绘图但没有 facet_wrap
- php - 如何使用 PHP 中的 API v4 保护 Google 表格中的范围?
- forms - 如何构建一个两列多行的颤振表单?
- c++ - 如何使用 gtest 模拟 EXPECT_CALL
- javascript - 如何从数字数组中删除数学抵消值?