如何在Pandas中保持infoid列顺序不变并对statisticsdate列升序排序?
Pandas数据处理:保留infoid原始顺序,组内按statisticsdate升序排列
需求说明
需要在处理Pandas数据时,保持infoid列的原有出现顺序不变,同时将每个infoid对应的statisticsdate列按升序排列。
原始数据
statisticsdate infoid 20230108 46726004 20230106 46726004 20230108 46725082 20230107 46725082 20230108 46725081 20230108 46724162 20230108 46720662
期望结果
statisticsdate infoid 20230106 46726004 20230108 46726004 20230107 46725082 20230108 46725082 20230108 46725081 20230108 46724162 20230108 46720662
实现方案
核心思路是给infoid列按首次出现的顺序生成分类标签,以此为依据分组后,在组内对statisticsdate进行升序排序:
import pandas as pd # 构造原始DataFrame data = { 'statisticsdate': [20230108, 20230106, 20230108, 20230107, 20230108, 20230108, 20230108], 'infoid': [46726004, 46726004, 46725082, 46725082, 46725081, 46724162, 46720662] } df = pd.DataFrame(data) # 生成保留原始顺序的infoid分类列 df['infoid_order'] = pd.Categorical(df['infoid'], categories=df['infoid'].unique(), ordered=True) # 按分类列+日期排序,移除临时列 result_df = df.sort_values(by=['infoid_order', 'statisticsdate'], ascending=[True, True]).drop('infoid_order', axis=1) # 重置索引(可选操作) result_df = result_df.reset_index(drop=True) print(result_df)
代码说明
pd.Categorical通过categories=df['infoid'].unique()锁定infoid的原始出现顺序,ordered=True使该列可用于排序依据;sort_values先按infoid的原始顺序排序,再在每个infoid组内对statisticsdate升序排列;- 最后移除临时生成的
infoid_order列,得到符合需求的结果。
内容的提问来源于stack exchange,提问作者cloudscomputes
相关产品推荐
相关产品推荐

