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

将时间序列DataFrame的Ticker列唯一值转换为多列

嘿,作为Python新手遇到这种格式转换的需求太正常啦!刚好pandas有专门的高效方法来解决这个问题,完全能hold住百万行的数据量,不用怕~

首先,先把你的示例数据用pandas还原出来(方便你测试):

import pandas as pd

data = {
    'Date': ['2018-01-01', '2018-01-01', '2018-01-01', '2018-01-01', '2018-01-02', '2018-01-02'],
    'Ticker': ['AAA', 'BBB', 'CCC', 'DDD', 'BBB', 'CCC'],
    'Price': [100, 200, 1000, 3000, 201, 1001]
}
df = pd.DataFrame(data)

接下来就是核心的转换步骤,用pivot方法就行——这是pandas专门为这种长表转宽表场景设计的,底层是向量化操作,效率极高,处理百万行数据毫无压力:

# 执行转换
wide_df = df.pivot(index='Date', columns='Ticker', values='Price').reset_index()
# 去掉列索引的名称,让格式和你要求的完全一致
wide_df.columns.name = None

执行完之后,wide_df的格式就完全符合你的需求了:

Date    AAA    BBB    CCC    DDD
0  2018-01-01  100.0  200.0  1000.0  3000.0
1  2018-01-02    NaN  201.0  1001.0    NaN

补充说明(针对特殊情况)

如果你的原始数据里存在同一天同一个股票有多条价格记录的情况(也就是Date和Ticker的组合不唯一),那可以用pivot_table替代,并指定一个聚合函数来处理重复值,比如取第一条、平均值或者最大值:

# 比如取每条重复组合的第一个价格
wide_df = df.pivot_table(index='Date', columns='Ticker', values='Price', aggfunc='first').reset_index()
wide_df.columns.name = None

另外,如果你的Date列还不是datetime类型,建议先转换一下,方便后续做时间序列的相关操作:

df['Date'] = pd.to_datetime(df['Date'])

放心用这个方法就行,百万级别的数据量pandas完全能高效处理,比自己写循环快太多啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:37:08