如何按账户和类别分组删除pandas dataframe中的旧数据行
Pandas 分组保留最新记录实现方案
首先提前做字段类型校验,确保startdate和enddate为 datetime 类型,避免字符串排序逻辑错误,50万行数据的量级下以下方案运行效率足够:
实现步骤
- 转换日期字段格式
import pandas as pd # 转换日期字段为datetime类型 df[['startdate', 'enddate']] = df[['startdate', 'enddate']].apply(pd.to_datetime)
- 排序后提取每组最新记录
# 写法1:排序后去重,可读性更高 df_sorted = df.sort_values(by=['account', 'category', 'enddate'], ascending=[True, True, False]) result = df_sorted.drop_duplicates(subset=['account', 'category'], keep='first')
# 写法2:排序后分组取首行,写法更简洁 result = df.sort_values('enddate', ascending=False).groupby(['account', 'category'], as_index=False).first()
补充说明
- 如果你判定“最新记录”的规则是按
startdate最大为准,把排序字段中的enddate替换为startdate即可 - 如果存在同分组下
enddate相同的情况,可以在排序字段后追加startdate作为第二排序维度,避免取值随机 - 50万行数据场景下两种方式的运行耗时均在百毫秒级,无性能问题
内容的提问来源于stack exchange,提问作者jimjay203
相关产品推荐
相关产品推荐

