获取DataFrame中每个ID对应的最新timestamp记录
筛选DataFrame中每个ID的最新时间戳记录
假设你的DataFrame已加载为df,若timestamp列还不是datetime类型,需先转换格式,下面是几种高效实现需求的方法:
方法1:排序后分组取最后一行
先按Id升序、timestamp降序排序,再按Id分组并保留每组第一行(即最新记录):
# 转换timestamp为datetime类型(按需执行) df['timestamp'] = pd.to_datetime(df['timestamp']) # 排序+分组提取最新记录 result = df.sort_values(['Id', 'timestamp'], ascending=[True, False]) \ .groupby('Id') \ .first() \ .reset_index()
方法2:使用groupby+idxmax
通过idxmax获取每组中最大timestamp对应的行索引,再提取目标行:
df['timestamp'] = pd.to_datetime(df['timestamp']) # 获取每组最新记录的索引 max_idx = df.groupby('Id')['timestamp'].idxmax() # 提取对应行数据 result = df.loc[max_idx].reset_index(drop=True)
方法3:用drop_duplicates简化操作
先按timestamp降序排序,直接保留每个Id的第一条记录,最后按Id排序整理:
df['timestamp'] = pd.to_datetime(df['timestamp']) result = df.sort_values('timestamp', ascending=False) \ .drop_duplicates(subset='Id') \ .sort_values('Id') \ .reset_index(drop=True)
以上方法均可得到目标结果:
Id timestamp W-001 2022-10-15 17:55:21 W-002 2022-11-11 15:12:57 W-003 2022-11-18 09:35:23
内容的提问来源于stack exchange,提问作者Evantaka
相关产品推荐
相关产品推荐

