基于日期列排序DataFrame并保持同ID分组的实现问题
按ID分组并组内日期降序排序的正确实现
原始数据结构
| ID | Date |
|---|---|
| 131 | 2023-09-06 08:14:01.455890 |
| 131 | 2023-08-07 14:12:20.724080 |
| 124 | 2023-09-08 14:12:20.724080 |
| 131 | 2023-07-09 14:12:23.647488 |
| 124 | 2023-09-03 14:12:20.724080 |
问题说明
你尝试的代码filtered_df.sort_values(by=['date','ID'],ascending=False, inplace = True)无法实现预期效果——它优先按date降序排序,会打乱相同ID的分组。你需要的是相同ID的记录归为一组,每组内按日期降序排列,目标结果如下:
| ID | Date |
|---|---|
| 131 | 2023-09-06 08:14:01.455890 |
| 131 | 2023-08-07 14:12:20.724080 |
| 131 | 2023-07-09 14:12:23.647488 |
| 124 | 2023-09-08 14:12:20.724080 |
| 124 | 2023-09-03 14:12:20.724080 |
正确解法
调整排序的优先级和各字段的排序方向:先按ID降序(保证同ID聚在一起),再按Date降序(组内按日期从新到旧排列)。代码如下:
# 直接修改原DataFrame filtered_df.sort_values(by=['ID', 'Date'], ascending=[False, False], inplace=True) # 或者生成新的DataFrame(不修改原数据) sorted_df = filtered_df.sort_values(by=['ID', 'Date'], ascending=[False, False])
关键说明
- 排序字段顺序:先写
ID确保同ID的记录被分组,再写Date处理组内排序 ascending参数传入列表:对应每个排序字段的排序方向,[False, False]表示ID降序、Date降序,这样ID大的组会排在前面,组内最新日期的记录在前。
内容的提问来源于stack exchange,提问作者Andrew Pike
相关产品推荐
相关产品推荐

