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

如何将Pandas DataFrame拆分为滚动的小型子DataFrame

Python生成滚动窗口子DataFrame列表解决方案

核心逻辑

对于10行的DataFrame,窗口大小为5时,有效窗口数为10 - 5 + 1 = 6,对应起始行索引0到5,分别截取i到i+4(共5行)的子DataFrame即可,这和R中用lapply遍历起始索引的思路一致。

正确代码实现

import pandas as pd

# 假设small2是你的10×10 DataFrame
window_size = 5
# 计算有效窗口总数
total_windows = len(small2) - window_size + 1
# 用列表推导式生成滚动窗口子DataFrame列表,等效于R的lapply
rolling_subdfs = [small2.iloc[i:i+window_size, :] for i in range(total_windows)]

代码说明

  • len(small2)获取DataFrame总行数,通过总行数-窗口大小+1得到正确的窗口数量(6个)
  • range(total_windows)生成0到5的起始索引,对应每个窗口的第一行位置
  • iloc[i:i+window_size, :]通过位置索引截取连续5行、所有列的子DataFrame,这是Python中定位行切片的标准写法(替代R的x:y语法)

你之前的问题分析

  • 用冒号语法报错:Python中不能直接像R那样用small2[1:5]的方式按行切片(除非DataFrame的行索引是连续整数且未修改),必须用iloc明确指定位置索引,否则会触发索引匹配错误。
  • 生成10个元素:大概率是遍历了0到9的所有行索引,而非仅0到5的起始索引,导致多生成了4个不满足5行要求的窗口(比如起始索引6时,只能取到6-9共4行)。

验证结果

可以通过以下代码确认每个子DataFrame的行数:

for idx, sub_df in enumerate(rolling_subdfs):
    print(f"第{idx+1}个窗口行数: {len(sub_df)}")

输出会显示6个窗口,每个窗口行数均为5。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:05:15