首页 >后端开发 >Python教程 >如何识别一个 Pandas DataFrame 中存在而不是另一个中存在的行?

如何识别一个 Pandas DataFrame 中存在而不是另一个中存在的行?

Patricia Arquette
Patricia Arquette原创
2025-01-03 10:45:44310浏览

How to Identify Rows Present in One Pandas DataFrame but Not Another?

识别 Pandas DataFrame 中的不常见行

使用多个数据框时,有必要识别一个数据框中存在但另一个中不存在的行。假设我们有两个数据框 df1 和 df2,其中 df2 是 df1 的子集。

我们如何从 df1 中提取 df2 中不存在的行?

考虑以下示例:

import pandas as pd

df1 = pd.DataFrame(data={'col1': [1, 2, 3, 4, 5, 3], 'col2': [10, 11, 12, 13, 14, 10]})
df2 = pd.DataFrame(data={'col1': [1, 2, 3], 'col2': [10, 11, 12]})

print("df1:")
print(df1)

print("\ndf2:")
print(df2)

输出:

   col1  col2
0     1    10
1     2    11
2     3    12
3     4    13
4     5    14
5     3    10

   col1  col2
0     1    10
1     2    11
2     3    12

我们的目标是找到 df1 中的行df2 中不存在。

解决方案:

为了准确识别不常见的行,我们需要在 col1 和 col2 列上执行 df1 和 df2 之间的左连接,确保消除 df2 中的重复项。此外,我们指定 Indicator=True 来创建一个额外的列,指示每个合并行的来源。

生成的数据框 df_all 包含 df1 和 df2 中的所有行,并附加一个列 _merge 来指示是否合并行源自两个数据帧(两者)、仅 df1 (left_only) 或仅 df2 (right_only)。

df_all = df1.merge(df2.drop_duplicates(), on=['col1', 'col2'], how='left', indicator=True)

我们现在可以使用布尔条件 df_all['_merge'] == 'left_only' 过滤 df_all 以从 df1 中提取不常见的行。

df_uncommon = df_all[df_all['_merge'] == 'left_only']
print("\nUncommon rows in df1:")
print(df_uncommon)

这将返回所需的输出:

   col1  col2 _merge
3     4    13  left_only
4     5    14  left_only
5     3    10  left_only

通过利用具有重复消除功能的左连接和 _merge 列,我们可以有效地识别并提取 df1 中不存在于 df2 中的行。

以上是如何识别一个 Pandas DataFrame 中存在而不是另一个中存在的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn