Pandas如何按多列条件筛选DataFrame每组最新Modified_Date对应行
实现方案
你可以按照以下两步完成筛选,核心是先转换时间列格式保证比较正确,再按双字段分组取最新记录:
- 首先将
Modified_Date列转换为Pandas内置的日期时间类型,避免字符串比较出现时间顺序判断错误 - 按
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
相关产品推荐
相关产品推荐

