使用循环复制编辑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()
问题分析
原循环存在三个核心问题:
df_hour_i是循环内临时变量,循环结束后无法保留所有DataFrame实例;- 错误引用
df_hour_0的shift结果,每个DataFrame应基于自身复制的原始数据执行shift操作,而非依赖首个DataFrame; - 空字典创建时用
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
相关产品推荐
相关产品推荐

