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

如何按时间排序Pandas DataFrame并保持同id分组?

解决方案

首先需要将date列转换为datetime类型,确保排序基于时间逻辑而非字符串规则,之后使用sort_values方法同时按id和date排序,既能保证同一id的记录归为一组,又能让组内记录按时间升序排列。

代码实现

import pandas as pd

df = pd.DataFrame()
df['id'] = [1, 1, 1, 2, 2]
df['val'] = [10, 15, 12, 13, -1]
df['date'] = ['2023-02-23 22:15:00','2023-02-23 22:00:00','2023-02-24 22:15:00','2023-02-23 22:15:00','2023-02-23 21:15:00' ]

# 将date列转换为datetime类型
df['date'] = pd.to_datetime(df['date'])

# 按id分组,组内按date升序排序,同时重置索引
df_sorted = df.sort_values(by=['id', 'date'], ignore_index=True)

print(df_sorted)

输出结果

id  val                date
0   1   15 2023-02-23 22:00:00
1   1   10 2023-02-23 22:15:00
2   1   12 2023-02-24 22:15:00
3   2   -1 2023-02-23 21:15:00
4   2   13 2023-02-23 22:15:00

如果需要组的顺序按每个id组的最早时间排序(而非原id顺序),可以先计算每个id的最早时间,再以此为依据排序:

# 计算每个id的最早日期
df['min_date'] = df.groupby('id')['date'].transform('min')

# 先按min_date排序,再按id和date排序,最后删除临时列
df_sorted = df.sort_values(by=['min_date', 'id', 'date'], ignore_index=True).drop('min_date', axis=1)

从你的示例输出来看,第一种方案已完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:55:09