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

Python Pandas 去除180天内同名重复记录的实现方案咨询

Pandas数据过滤实现方案

核心处理逻辑为按姓名分组后,逐行对比当前记录与同组内上一条保留记录的日期间隔,间隔大于180天则保留当前记录,否则删除。

步骤1:转换日期格式

首先将Date列从字符串格式转换为pandas datetime格式,用于时间差计算:

import pandas as pd

# 构造原始数据
data_dict = {'Name':['John','John','John','John','John','John','Peter','Peter','Luke','Luke'],
             'Date':['2021-03-01', '2021-08-01','2021-12-01', '2022-04-11', '2022-10-01','2023-12-01','2021-05-01','2021-12-31','2021-08-01','2021-11-01']}
df = pd.DataFrame(data_dict)
# 日期格式转换
df['Date'] = pd.to_datetime(df['Date'])

步骤2:定义分组过滤函数

自定义函数处理每个姓名对应的分组数据,跟踪上一条保留的记录做时间差判断:

def filter_interval(group):
    # 先对分组内的记录按日期升序排序,避免原始数据日期乱序导致计算错误
    group = group.sort_values('Date').reset_index(drop=True)
    # 第一条记录默认保留
    keep_idx = [0]
    for i in range(1, len(group)):
        # 计算当前记录与上一条保留记录的天数差
        diff_days = (group.loc[i, 'Date'] - group.loc[keep_idx[-1], 'Date']).days
        if diff_days > 180:
            keep_idx.append(i)
    return group.loc[keep_idx]

步骤3:分组应用函数得到最终结果

dfa = df.groupby('Name', group_keys=False).apply(filter_interval).reset_index(drop=True)
# 若需要将日期转回字符串格式,可执行下行代码
dfa['Date'] = dfa['Date'].dt.strftime('%Y-%m-%d')

运行后得到的dfa与给出的预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:36:04