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

Python pandas按日期升序筛选、按value分组去重取最新记录实现

问题解答

现有实现的正确性判断

你当前的代码实现不正确,存在两处问题:

  • 字段名不匹配:原始CSV文件的日期字段名为Date-Time,你代码中直接调用df["date"]会抛出字段不存在的报错,需要先对应到正确的字段名。
  • 排序逻辑不符合需求:sort_values("date")默认按时间升序排列,每组时间最早的记录会排在最前面,此时调用groupby().first()取到的是每组最早的记录,和你要取「最新时间记录」的需求完全相反。

修正后的原思路实现

如果要沿用你现有的排序+分组取数的思路,调整后代码如下:

# 转换原始日期字段为datetime格式
df["Date-Time"] = pd.to_datetime(df["Date-Time"])
# 按日期降序排列,每组最新的记录排在最前
df = df.sort_values("Date-Time", ascending=False).groupby(['value'], as_index=False).first()
# 重命名字段符合输出要求
df = df.rename(columns={"Date-Time": "date"})
print(df)

更优实现方案

推荐使用idxmax()方案,不需要全表排序,大数据量下性能提升非常明显:

import pandas as pd
# 转换日期字段格式
df["Date-Time"] = pd.to_datetime(df["Date-Time"])
# 直接取每个value分组下日期最大值对应的行索引,筛选对应行
df = df.loc[df.groupby("value")["Date-Time"].idxmax()].reset_index(drop=True)
# 重命名日期字段
df = df.rename(columns={"Date-Time": "date"})
print(df)

该方案避免了全表排序的高时间开销,同时也不会因为排序方向设置错误导致结果异常,稳定性和性能都更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 20:39:03