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

如何基于现有DataFrame构建多级索引DataFrame并实现每日更新?

解决多级索引DataFrame构建与增量更新问题

一、构建目标多级索引DataFrame

假设原收盘价DataFrame为close_df,索引为datetime类型,列是交易代码(tickers),值为对应日期的收盘价。

1. 构建多级列索引

先通过笛卡尔积生成(ticker, period)形式的多级列,其中period为1到9:

import pandas as pd

# 获取原列名(交易代码)和周期列表
tickers = close_df.columns.tolist()
periods = list(range(1, 10))

# 生成多级列索引
multi_columns = pd.MultiIndex.from_product([tickers, periods], names=['ticker', 'period'])

2. 填充各周期的数据

  • period=1:直接取原收盘价数据
  • period=2~9:计算对应未来n天收盘价与当日收盘价的差值(period=2对应n=1,period=9对应n=8)
# 初始化空的多级索引DataFrame
multi_df = pd.DataFrame(index=close_df.index, columns=multi_columns)

# 填充period=1的数据
for ticker in tickers:
    multi_df[(ticker, 1)] = close_df[ticker]

# 填充period=2~9的差值数据
for period in range(2, 10):
    n = period - 1  # period=2对应n=1,即D(n+1)-Dn
    for ticker in tickers:
        # 未来n天收盘价 - 当日收盘价,最后n行自动为NaN
        multi_df[(ticker, period)] = close_df[ticker].shift(-n) - close_df[ticker]

这种方式直接基于原索引和多级列逐个填充,能避免from_frame和product方法导致的长度不匹配问题。

二、每日新增数据的增量更新

不需要重新构建整个多级索引DataFrame,只需处理新增行并更新相关历史数据:

1. 新增单日数据的处理

假设新增的单日数据为new_row(Series类型,索引为tickers,值为当日收盘价),对应的日期为new_date:

# 1. 将新增行添加到原收盘价DataFrame
close_df.loc[new_date] = new_row

# 2. 为多级索引DataFrame添加空的新行
multi_df.loc[new_date] = pd.Series(index=multi_columns)

# 3. 填充新行的period=1数据
for ticker in tickers:
    multi_df.loc[new_date, (ticker, 1)] = new_row[ticker]

# 4. 更新历史行的对应period数据(新数据到来后,前8天的部分period值可计算)
for n in range(1, 9):
    target_date = new_date - pd.Timedelta(days=n)
    if target_date in multi_df.index:
        period = n + 1
        for ticker in tickers:
            # 计算target_date对应period的差值:新日期收盘价 - target_date收盘价
            multi_df.loc[target_date, (ticker, period)] = new_row[ticker] - close_df.loc[target_date, ticker]

说明

  • 新增行的period=2~9数据暂时为NaN,后续每日新增数据时,会逐步填充前8天对应period的差值。
  • 每次仅需更新前1-8天的行,无需重构整个多级索引结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:31:05