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

Pandas按ID分组并筛选保留每日最后一条datetime数据的实现方法

Pandas按ID分组后保留每日最晚录入行的解决方法

错误原因分析

你原有代码存在两个核心问题:

  • 仅指定id作为分组键,没有新增日期维度的分组条件,无法实现按日去重的需求
  • 分组后仅提取了time列做处理,没有保留和其他列的关联,无法返回完整行数据

正确实现代码

方法1:groupby + idxmax 取最大值索引(推荐,性能更稳定)

import pandas as pd
# 模拟数据
df = pd.DataFrame({'id': [1, 1, 1],
                   'time': ['2011/10/10 10:00',
                            '2011/10/10 10:05',
                            '2011/10/11 14:00'],
                   'vals1': [3, 3, 1],
                   'vals2': [2, 3, 1]})

# 设置datetime类型
df['time'] = pd.to_datetime(df['time'])

# 按id + 日期分组,取每个分组内time最大值对应的行索引
max_time_idx = df.groupby(['id', df['time'].dt.floor('d')])['time'].idxmax()
# 按索引提取对应行,重置索引
result = df.loc[max_time_idx].reset_index(drop=True)

方法2:排序 + 去重(逻辑更直观)

# 先按时间升序排序
df_sorted = df.sort_values('time')
# 按id + 日期去重,保留每个分组的最后一条(即时间最晚的)数据
result = df_sorted.drop_duplicates(subset=['id', df_sorted['time'].dt.floor('d')], keep='last').reset_index(drop=True)

两种方法输出结果都和你给出的预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:45:03