如何在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)
代码说明
- 定义原始数据和窗口大小
window_size=6 - 生成对应目标输出6行的窗口起始索引
- 通过索引矩阵构造每个窗口的元素位置,用
np.where将超出原始数据长度的位置替换为NaN - 将每个窗口的数组转换为列表,赋值给新列
col2
内容的提问来源于stack exchange,提问作者Rajan Kumar Yadav
相关产品推荐
相关产品推荐

