如何将pandas DataFrame单列数据重排后追加到另一DataFrame对应行列
解决方案
原有代码问题说明
- 循环内每次都会重置
count = 20,永远取的是前20行数据,不会向后滑动取后续分段 append方法是在DataFrame末尾追加行,不是把新的数据扩展为列,所以只会生成1列的结果- 切片逻辑错误,没有按窗口滑动取df1的对应分段数据
实现代码
不用编写复杂的循环逻辑,直接用numpy的reshape方法即可完成一维序列到多行多列的转换,不会出现列顺序错乱、缺失的问题:
import pandas as pd import numpy as np # 配置单组数据长度 group_len = 20 # 取df1的Close列数值 close_arr = df1['Close'].values # 方式1:自动按实际数据长度计算可分的组数 # group_num = len(close_arr) // group_len # 方式2:固定取前100个值分为5组,和你原需求一致 group_num = 5 # 截取对应长度的数值,避免reshape报错 close_arr = close_arr[: group_num * group_len] # 转换为[组数,单组长度]的二维数组 reshaped_arr = close_arr.reshape(group_num, group_len) # 生成要求的列名:第一列是Close,后续依次为Close 2到Close 20 col_names = ['Close'] + [f'Close {i}' for i in range(2, group_len + 1)] # 生成中间DataFrame temp_df = pd.DataFrame(reshaped_arr, columns=col_names) # 写入到df2 # 如果df2是空的,直接赋值即可 df2 = temp_df.copy() # 如果df2原有其他列(如target)需要保留,用以下方式赋值 # df2[col_names] = temp_df[col_names]
补充说明
如果df1的Close列长度不足group_num * group_len,可以先给close_arr补NaN到指定长度再reshape,符合你后续删除NaN值的处理逻辑,不会影响target列的后续填充。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

