如何按时间排序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
相关产品推荐
相关产品推荐

