将时间序列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
相关产品推荐
相关产品推荐

