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

求助:从数据集提取按id分组且日期间隔超一年的最高code记录

需求与解决方案

原始数据集

idcodedate
13920180527
11720180223
11720180223
11720180223
13020120612
11420120214
24020210605
23220210412
22520210315
33920170504
31720170205
34020150506

提取规则

  • 按id分组,date越大优先级越高
  • 过滤重复记录:同一id下同一code的重复行只保留最新日期的一条
  • 从高优先级(最新日期)开始筛选,保留与上一条保留记录的日期间隔超过一年的条目

期望输出

idcodedate
13920180527
13020120612
24020210605
33920170504
34020150506

当前代码的问题

你尝试的代码仅能获取每个id组的最大日期条目,无法满足间隔筛选的需求:

latest_dates = column_selection.groupby("id").max() # group the data by id and get the max date for each group
latest_dates = latest_dates.reset_index() # reset the index
latest_dates # print the latest date for each ID with the new index

输出结果仅保留了每组的最新一条:

idcodedate
13920180527
24020210605
33920170504

解决方案步骤

  1. 去重处理:按id和code分组,保留每个组合的最大date,去除重复行
  2. 日期格式转换:将date列转为datetime类型,方便计算时间间隔
  3. 按日期排序:每个id组内按date降序排列,确保从最新记录开始筛选
  4. 间隔筛选:遍历每个组,只保留与上一条保留记录间隔超过一年的条目

完整代码实现

import pandas as pd

# 假设原始数据存储在DataFrame column_selection中
# 步骤1:去重,保留每个id+code组合的最大date
unique_data = column_selection.groupby(['id', 'code'])['date'].max().reset_index()

# 步骤2:将date转为datetime类型
unique_data['date'] = pd.to_datetime(unique_data['date'], format='%Y%m%d')

# 步骤3:按id分组,每组内按date降序排序
sorted_data = unique_data.sort_values(['id', 'date'], ascending=[True, False])

# 步骤4:筛选间隔超过一年的条目
def filter_year_interval(group):
    # 初始化结果列表,先加入最新记录
    result = [group.iloc[0]]
    # 遍历后续行
    for idx in range(1, len(group)):
        current_row = group.iloc[idx]
        last_kept_date = result[-1]['date']
        # 判断时间间隔是否超过一年(365天)
        if (last_kept_date - current_row['date']).days > 365:
            result.append(current_row)
    return pd.DataFrame(result)

# 应用筛选函数到每个id组
final_result = sorted_data.groupby('id').apply(filter_year_interval).reset_index(drop=True)

# 可选:将date转回原字符串格式
final_result['date'] = final_result['date'].dt.strftime('%Y%m%d')

print(final_result)

代码说明

  • 去重阶段:通过groupby(['id', 'code'])['date'].max()确保同一id下的同一code只保留最新日期的记录
  • 日期转换:使用pd.to_datetime将字符串日期转为可计算的datetime对象,便于时间差判断
  • 排序逻辑:降序排序保证从最新记录开始筛选,符合优先级要求
  • 间隔筛选:自定义函数遍历每个组,只保留与上一条保留记录间隔超过365天的条目,完全匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:12:05