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

如何将DataFrame/Series拆分为所有可能的指定大小连续子块?

解决DataFrame滑动窗口式连续子块拆分问题

嗨,我明白你想要的是滑动窗口式的连续子DataFrame,而不是简单的均分拆分。咱们来一步步搞定这个需求:

首先先修正你代码里的一个小错误——创建pd.Series时需要传入一个列表,否则会报错,正确的初始化代码应该是:

import pandas as pd
a = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
df = pd.DataFrame(data=a)

接下来给你两种简便的解决方案:

方法一:Pandas原生索引切片(直观易读)

这种方法通过循环遍历索引,用iloc切片生成每个连续子块,非常适合初学者理解:

def sliding_split(df, chunk_size=3):
    # 计算可生成的子块数量:总长度 - 窗口大小 + 1
    num_chunks = len(df) - chunk_size + 1
    # 循环生成每个子DataFrame
    return [df.iloc[i:i+chunk_size] for i in range(num_chunks)]

# 测试调用
result = sliding_split(df)
for idx, chunk in enumerate(result):
    print(f"子块 {idx+1}:")
    print(chunk)
    print("---")

运行后会得到你需要的所有连续子块:1-3、2-4、3-5、...、8-10,一共8个连续窗口子DataFrame。

方法二:Numpy滑动窗口视图(高效处理大数据)

如果你的DataFrame数据量很大,用Numpy的滑动窗口视图会更高效,避免循环的性能损耗:

import numpy as np

def sliding_split_with_numpy(df, chunk_size=3):
    # 生成滑动窗口数组视图(不复制数据,节省内存)
    windowed_array = np.lib.stride_tricks.sliding_window_view(df.values, window_shape=(chunk_size, df.shape[1]))
    # 将每个窗口转换回DataFrame
    return [pd.DataFrame(window.squeeze(), columns=df.columns) for window in windowed_array]

这里sliding_window_view直接生成窗口化的数组视图,再通过列表推导式转换成DataFrame即可,性能比纯Pandas循环更优。

两种方法都能完美满足你的需求,你可以根据自己的场景选择:追求可读性选方法一,追求性能选方法二。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:32