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

使用循环复制编辑DataFrame:创建24个DataFrame的技术问题

循环创建并存储24个DataFrame的问题与解决方案

问题背景

需要创建24个结构相似的DataFrame,首个DataFrame的创建代码如下:

df_hour_0 = df_dummies.copy()
df_hour_0['Price_24_1'] = df_hour_0['Price_REG1']
df_hour_0['Price_24_2'] = df_hour_0['Price_REG2']
df_hour_0['Price_24_3'] = df_hour_0['Price_REG3']
df_hour_0['Price_24_4'] = df_hour_0['Price_REG4']

df_hour_0[['Price_24_1', 'Price_24_2', 'Price_24_3', 'Price_24_4'
           ]] = df_hour_0[['Price_24_1', 'Price_24_2', 'Price_24_3', 'Price_24_4']].shift(1)

尝试过以下循环方法但未成功:

for i in range(24):
    df_hour_i = df_dummies.copy()
    df_hour_i['Price_24_1'] = df_hour_i['Price_REG1']
    df_hour_i['Price_24_2'] = df_hour_i['Price_REG2']
    df_hour_i['Price_24_3'] = df_hour_i['Price_REG3']
    df_hour_i['Price_24_4'] = df_hour_i['Price_REG4']
    df_hour_i[['Price_24_1', 'Price_24_2', 'Price_24_3', 'Price_24_4']] = df_hour_0[['Price_24_1', 'Price_24_2', 'Price_24_3', 'Price_24_4']].shift(i+1)

已创建存储DataFrame的空字典,但不知如何填充:

d = {}
for x in range(23):
    d[x] = pd.DataFrame()

问题分析

原循环存在三个核心问题:

  1. df_hour_i是循环内临时变量,循环结束后无法保留所有DataFrame实例;
  2. 错误引用df_hour_0的shift结果,每个DataFrame应基于自身复制的原始数据执行shift操作,而非依赖首个DataFrame;
  3. 空字典创建时用range(23),仅生成23个键,无法容纳24个DataFrame。

解决方案

使用字典存储所有DataFrame,循环中直接完成复制、列赋值和shift操作,代码如下:

import pandas as pd

# 初始化存储24个DataFrame的字典
df_dict = {}
# 定义需要映射的列名对,简化重复代码
reg_columns = ['Price_REG1', 'Price_REG2', 'Price_REG3', 'Price_REG4']
target_columns = ['Price_24_1', 'Price_24_2', 'Price_24_3', 'Price_24_4']

# 循环创建24个DataFrame,i从0到23对应24个实例
for i in range(24):
    # 复制原始数据
    current_df = df_dummies.copy()
    # 将REG列的值赋值给目标列
    current_df[target_columns] = current_df[reg_columns]
    # 对目标列执行shift操作,shift次数对应i+1(首个实例shift(1),依次递增)
    current_df[target_columns] = current_df[target_columns].shift(i + 1)
    # 将结果存入字典,键为i,方便后续调用
    df_dict[i] = current_df

代码说明

  • 用字典df_dict统一管理所有DataFrame,通过键0到23可直接调用对应实例(如df_dict[0]对应原df_hour_0);
  • 将重复列名定义为列表,避免代码冗余,同时便于后续维护;
  • 每个循环独立复制原始数据并执行shift操作,确保每个DataFrame的独立性;
  • 循环范围range(24)确保生成24个DataFrame,解决原空字典数量不足的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:55:25