You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

忽略Timestamp列比较两个DataFrame,提取仅在第一个df中存在的行

解决方案

你可以用pandas的两种常用方法实现需求,都不需要修改原有数据的Timestamp字段,仅基于指定列做匹配:

方法1:merge标记法(兼容性最好,适合大数据量、多比较列场景)

核心逻辑是对两个df做左连接,用连接标记筛选仅在df1中存在的行:

import pandas as pd

# 此处替换为你自己读取df1、df2的代码,比如pd.read_excel/ pd.read_csv
# 示例数据构造可忽略
df1 = pd.DataFrame({
    'A': ['A1', 'A1', 'A1', 'A1', 'A1'],
    'B': ['B1', 'B1', 'B1', 'B2', 'B2'],
    'Start': ['2022-01-15', '2021-07-15', '2021-07-30', '2022-01-01', '2021-06-02'],
    'End': ['2022-02-15', '2021-10-17', '2021-10-02', '2023-01-01', '2021-06-04'],
    'Timestamp': ['2021-05-17', '2021-05-17', '2021-05-16', '2021-05-17', '2021-05-16']
})

df2 = pd.DataFrame({
    'A': ['A1', 'A1', 'A1', 'A1'],
    'B': ['B1', 'B1', 'B1', 'B3'],
    'Start': ['2022-01-15', '2021-07-15', '2021-07-30', '2021-07-02'],
    'End': ['2022-02-15', '2021-10-17', '2021-10-02', '2021-08-04'],
    'Timestamp': ['2021-05-16', '2021-05-16', '2021-05-15', '2021-05-14']
})

# 自动生成排除Timestamp的比较列列表
compare_cols = [col for col in df1.columns if col != 'Timestamp']

# 左连接并标记来源
merge_df = df1.merge(df2[compare_cols], on=compare_cols, how='left', indicator=True)
# 筛选仅在df1中存在的行,删除标记列
df1_unique = merge_df[merge_df['_merge'] == 'left_only'].drop('_merge', axis=1)

print(df1_unique)

方法2:多列值匹配法(代码更简洁,适合小数据量场景)

核心逻辑是把每行的比较列值转为元组,判断df1的元组是否不存在于df2的元组集合中:

compare_cols = [col for col in df1.columns if col != 'Timestamp']
df1_unique = df1[~df1[compare_cols].apply(tuple, axis=1).isin(df2[compare_cols].apply(tuple, axis=1))]

两种方法运行后输出的结果都和你给出的预期一致,会完整保留df1独有行的所有字段,包括Timestamp。

内容的提问来源于stack exchange,提问作者JDK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 01:00:01