Python中按id分组后对季度值按指定顺序排序的实现方法
解决方案
要实现按id分组后组内按季度日期升序排列,直接通过多字段排序即可完成,不需要复杂的分组聚合操作,步骤如下:
- 先将原
date列转换为pandas可识别的时间类型,你当前的季度格式为Q+季度数 两位年份,需要指定对应格式参数保证转换准确 - 以
id为第一排序键、转换后的时间列为第二排序键做全局排序,即可自动实现同id下按时间先后排列的效果
完整可运行代码示例:
import pandas as pd # 这里替换为你自己读入数据的代码,示例直接构造原始数据集 data = [ ["aa", "q1 22", "y"], ["aa", "q1 23", "y"], ["aa", "q2 22", "y"], ["aa", "q2 23", "y"], ["aa", "q3 22", "y"], ["aa", "q3 23", "y"], ["aa", "q4 22", "y"], ["aa", "q4 23", "ok"], ["bb", "q1 22", "n"], ["bb", "q1 23", "n"], ["bb", "q2 22", "n"], ["bb", "q2 23", "n"], ["bb", "q3 22", "n"], ["bb", "q3 23", "n"], ["bb", "q4 22", "n"], ["bb", "q4 23", "ok"] ] df = pd.DataFrame(data, columns=["id", "date", "stat"]) # 生成临时时间列用于排序 df["date_dt"] = pd.to_datetime(df["date"], format="Q%q %y") # 多字段排序 df_sorted = df.sort_values(by=["id", "date_dt"], ignore_index=True) # 删除临时辅助列 df_sorted = df_sorted.drop(columns="date_dt") print(df_sorted)
运行后输出的结果和你期望的完全匹配。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

