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

如何在Pandas中将DataFrame列值转为列表并生成滑动窗口新列

Pandas生成滑动窗口列表列(补NaN)

给定Pandas DataFrame的col1列数据:

col1
0.74
0.77
0.72
0.65
0.24
0.07
0.21
0.05
0.09

需要生成新列col2,每行是包含6个元素的滑动窗口列表,滑动步长为1,窗口末尾元素不足时填充NaN,最终目标输出如下:

col2
[0.74,0.77,0.72,0.65,0.24,0.07]
[0.77,0.72,0.65,0.24,0.07,0.21]
[0.72,0.65,0.24,0.07,0.21,0.05]
[0.65,0.24,0.07,0.21,0.05,0.09]
[0.24,0.07,0.21,0.05,0.09,NaN]
[0.07,0.21,0.05,0.09,NaN,NaN]

实现代码

通过numpy构造滑动窗口索引矩阵,批量处理填充NaN后转成列表列,高效实现需求:

import pandas as pd
import numpy as np

# 构造原始DataFrame
df = pd.DataFrame({'col1': [0.74, 0.77, 0.72, 0.65, 0.24, 0.07, 0.21, 0.05, 0.09]})

window_size = 6
# 生成6个窗口的起始索引
start_indices = np.arange(6)
# 构造每个窗口的索引矩阵
window_indices = start_indices[:, None] + np.arange(window_size)
# 超出原始数据范围的位置填充NaN
window_values = np.where(window_indices < len(df), df['col1'].values[window_indices], np.nan)
# 转换为列表并生成结果DataFrame
result_df = pd.DataFrame({'col2': [list(row) for row in window_values]})

# 打印结果
print(result_df)

代码说明

  1. 定义原始数据和窗口大小window_size=6
  2. 生成对应目标输出6行的窗口起始索引
  3. 通过索引矩阵构造每个窗口的元素位置,用np.where将超出原始数据长度的位置替换为NaN
  4. 将每个窗口的数组转换为列表,赋值给新列col2

内容的提问来源于stack exchange,提问作者Rajan Kumar Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:25:19