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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:25:28