使用多个数据框时,有必要识别一个数据框中存在但另一个中不存在的行。假设我们有两个数据框 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中文网其他相关文章!