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

Pandas如何按多列条件筛选DataFrame每组最新Modified_Date对应行

实现方案

你可以按照以下两步完成筛选,核心是先转换时间列格式保证比较正确,再按双字段分组取最新记录:

  1. 首先将Modified_Date列转换为Pandas内置的日期时间类型,避免字符串比较出现时间顺序判断错误
  2. 按ID和Date两个字段分组,取每个分组中Modified_Date最大值对应的行即可

完整代码

import pandas as pd

# 示例DataFrame构造
data = {'ID':['A', 'A', 'A', 'A', 'A', 'B','B','B','B'],
    'Date':['2021-2-13', '2021-2-14', '2021-2-14', '2021-2-14', '2021-2-15', '2021-2-14', '2021-2-14', '2021-2-15', '2021-2-15'],
    'Modified_Date':['3/19/2021  6:34:20 PM','3/20/2021  4:57:39 PM', '3/21/2021  4:57:40 PM', '3/22/2021  4:57:57 PM', '3/23/2021  4:57:41 PM',
                    '3/25/2021  11:44:15 PM','3/26/2021  2:16:09 PM', '3/20/2021  2:16:04 PM', '3/21/2021  4:57:40 PM'],
    'Steps': [1000, 1200, 1500, 2000, 1400, 4000, 5000,1000, 3500]}
df1 = pd.DataFrame(data)

# 转换时间列格式
df1['Modified_Date'] = pd.to_datetime(df1['Modified_Date'])

# 方案1:通过groupby + idxmax直接取对应行,性能更高
result = df1.loc[df1.groupby(['ID', 'Date'])['Modified_Date'].idxmax()].reset_index(drop=True)

# 方案2:先排序再去重,逻辑更直观,适合小数据量场景
# df1 = df1.sort_values('Modified_Date', ascending=True)
# result = df1.drop_duplicates(subset=['ID', 'Date'], keep='last').reset_index(drop=True)

print(result)

输出说明

运行后得到的结果完全符合需求:

  • ID为A、Date为2021-2-14的分组保留修改时间为3/22/2021 4:57:57 PM的行
  • 其余所有ID+Date子分组均保留修改时间最新的对应记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:54:03