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

如何按预定义列表对DataFrame的ticker列排序并保留时间顺序?

嘿,这个需求我经常碰到,给你捋捋怎么实现最靠谱:

实现思路

核心是利用 Pandas 的**分类数据类型(Categorical)**来指定自定义的 ticker 排序优先级,这样在排序时会严格遵循你定义的顺序,同时每个 ticker 内部保留原始的时间顺序。

具体代码步骤

先还原你的原始 DataFrame(补全了截断的 BOC 数据):

import pandas as pd

# 原始数据
data = {
    'date': ['2018-01-01', '2018-01-02', '2018-01-03',
             '2018-01-01', '2018-01-02', '2018-01-03'],
    'price': [1.323, 1.525, 1.045, 2.110, 2.150, 2.810],
    'ticker': ['AI', 'AI', 'AI', 'BOC', 'BOC', 'BOC'],
    'volume': [2000, 1500, 500, 3201, 5200, 4800]
}
df = pd.DataFrame(data)

接下来分两步操作:

  1. 将 ticker 列转为分类类型,绑定自定义顺序
# 你的预定义 ticker 顺序
custom_ticker_order = ["CAT", "AI", "BOC"]
# 把 ticker 列转为分类,指定顺序并开启排序优先级
df['ticker'] = pd.Categorical(df['ticker'], categories=custom_ticker_order, ordered=True)
  1. 按 ticker(自定义顺序)+ date(时间顺序)排序
# 先按自定义的 ticker 顺序分组,再按日期保持时间序列
sorted_df = df.sort_values(by=['ticker', 'date'])
验证结果

打印 sorted_df 会得到这样的输出(因为原始数据没有 CAT 的记录,所以直接展示 AI 和 BOC 的部分):

date  price ticker  volume
0  2018-01-01  1.323     AI    2000
1  2018-01-02  1.525     AI    1500
2  2018-01-03  1.045     AI     500
3  2018-01-01  2.110    BOC    3201
4  2018-01-02  2.150    BOC    5200
5  2018-01-03  2.810    BOC    4800
补充小提示
  • 如果你的 date 列还不是日期格式,建议先转换:df['date'] = pd.to_datetime(df['date']),避免字符串排序可能出现的问题。
  • 如果后续不需要分类类型,可转回普通字符串:sorted_df['ticker'] = sorted_df['ticker'].astype(str)

内容的提问来源于stack exchange,提问作者cqstack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:24:05