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

如何将日历年份设为列名、月日设为月度股票时间序列的索引?

解决方案

核心思路:用Pandas的pivot方法实现数据重塑

这种月度数据的行列转换,用pivot是最高效的方式,无需复杂循环或groupby嵌套。

步骤说明

  1. 预处理日期列:从原始日期中提取两个关键字段——年份(作为最终表格的列名)、月日(作为最终表格的索引,统一格式为MM-DD)。
  2. 执行数据重塑:通过pivot方法直接指定行、列、值的对应关系完成转换。

完整示例代码

假设你的原始数据集包含date(日期)和price(股票价格)两列:

import pandas as pd

# 替换为你的实际数据读取逻辑(如pd.read_csv)
df = pd.DataFrame({
    'date': ['2021-01-01', '2021-02-01', '2021-12-01',
             '2022-01-01', '2022-02-01', '2022-12-01',
             '2023-01-01', '2023-02-01', '2023-12-01'],
    'price': [100, 105, 120, 110, 112, 130, 125, 128, 145]
})

# 转换日期为datetime格式
df['date'] = pd.to_datetime(df['date'])

# 提取年份和月日字段
df['year'] = df['date'].dt.year.astype(str)
df['month_day'] = df['date'].dt.strftime('%m-%d')

# 执行数据重塑
result = df.pivot(index='month_day', columns='year', values='price')

# 按月份顺序排序索引
result = result.sort_index()

print(result)

输出效果(匹配你的目标)

month_day202120222023
01-01100110125
02-01105112128
............
12-01120130145

额外提示

  • 若原始日期格式不标准,先通过pd.to_datetime()统一转换;
  • 若存在重复年月的价格数据,改用pivot_table并指定aggfunc(如aggfunc='mean'取平均值)处理;
  • 如需中文格式索引(如“01月01日”),将strftime('%m-%d')替换为strftime('%m月%d日')即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:55:32