首页 > 解决方案 > 比较两个数据框而不考虑一列

问题描述

我想知道如何比较两个df并保留第一个df中但不在第二个df中的值,而不考虑Timestamp列,因为它不同,因为它反映了程序执行的时间。

如果有一行在 df2 中而不在 1 中,我不想要该行,因为我只对 df1 中的内容感兴趣,而不对 df2 中的内容感兴趣

数据框 1:

一个 开始 结尾 时间戳
A1 B1 2022-01-15 2022-02-15 2021-05-17
A1 B1 2021-07-15 2021-10-17 2021-05-17
A1 B1 2021-07-30 2021-10-02 2021-05-16
A1 B2 2022-01-01 2023-01-01 2021-05-17
A1 B2 2021-06-02 2021-06-04 2021-05-16

数据框 2:

一个 开始 结尾 时间戳
A1 B1 2022-01-15 2022-02-15 2021-05-16
A1 B1 2021-07-15 2021-10-17 2021-05-16
A1 B1 2021-07-30 2021-10-02 2021-05-15
A1 B3 2021-07-02 2021-08-04 2021-05-14

结果:

一个 开始 结尾 时间戳
A1 B2 2022-01-01 2023-01-01 2021-05-17
A1 B2 2021-06-02 2021-06-04 2021-05-16

谢谢!

标签: pythonpandasdataframe

解决方案


比较来自 2 个数据帧的行时,您始终可以使用pd.merge. 在这里,我们使用它:

  • on=[…]与要比较的列,
  • how='outer'包括在一个数据框中但不在另一个数据框中的行
  • indicator=True知道哪些数据框行来自
  • suffixes设置以便您要保留的剩余列不变
>>> df = pd.merge(df1, df2, on=['A', 'B', 'Start', 'End'], how='outer', suffixes=('', '_other'), indicator=True)
>>> df
    A   B       Start         End   Timestamp Timestamp_other      _merge
0  A1  B1  2022-01-15  2022-02-15  2021-05-17      2021-05-16        both
1  A1  B1  2021-07-15  2021-10-17  2021-05-17      2021-05-16        both
2  A1  B1  2021-07-30  2021-10-02  2021-05-16      2021-05-15        both
3  A1  B2  2022-01-01  2023-01-01  2021-05-17             NaN   left_only
4  A1  B2  2021-06-02  2021-06-04  2021-05-16             NaN   left_only
5  A1  B3  2021-07-02  2021-08-04         NaN      2021-05-14  right_only
>>> df.loc[df['_merge'] == 'left_only', df1.columns]
    A   B       Start         End   Timestamp
3  A1  B2  2022-01-01  2023-01-01  2021-05-17
4  A1  B2  2021-06-02  2021-06-04  2021-05-16

推荐阅读