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

如何将Pandas DataFrame按连续4天滑动拆分并存入列表?

如何将Pandas DataFrame拆分为连续4天数据的滑动窗口列表

看起来你想要实现滑动窗口式的DataFrame切片,把连续4天的子DataFrame存入列表。你的单日切片思路是对的,但需要调整成滑动窗口的逻辑。下面我会一步步给你解决方法:

第一步:预处理数据(确保日期格式正确)

首先要把你的Date列转换为datetime类型,并且确保数据按日期排序(虽然你的示例数据已经有序,但实际场景中这一步很重要):

import pandas as pd

# 构造你的示例DataFrame
data = {
    'Date': ['1/1/2017', '2/1/2017', '3/1/2017', '4/1/2017', '5/1/2017', '6/1/2017', '7/1/2017', '8/1/2017', '9/1/2017'],
    'SKU': ['X1', 'X2', 'X1', 'X2', 'X1', 'X2', 'X2', 'X1', 'X1'],
    'Balance': [8, 45, 47, 16, 14, 67, 9, 66, 158]
}
df = pd.DataFrame(data)

# 转换Date列为datetime类型
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
# 按日期排序并重置索引
df = df.sort_values('Date').reset_index(drop=True)

第二步:实现滑动窗口切片

我们可以通过iloc按位置切片来实现滑动窗口。因为你的数据有9行,窗口大小为4,所以总共会生成9 - 4 + 1 = 6个窗口。

方法1:循环实现(直观易懂)

window_size = 4
df_list = []

for i in range(len(df) - window_size + 1):
    # 截取从索引i开始的连续4行
    window_df = df.iloc[i:i+window_size].copy()
    # 重置子DataFrame的索引,和你示例中的输出格式一致
    window_df = window_df.reset_index(drop=True)
    df_list.append(window_df)

方法2:列表推导式(更简洁)

如果喜欢更紧凑的代码,可以用列表推导式一步完成:

window_size = 4
df_list = [df.iloc[i:i+window_size].reset_index(drop=True) for i in range(len(df) - window_size + 1)]

验证结果

比如你要的「从第2天开始的连续4天数据」,对应Python列表的df_list[1](因为Python列表从0开始索引),输出如下:

Date SKU  Balance
0 2017-01-02  X2       45
1 2017-01-03  X1       47
2 2017-01-04  X2       16
3 2017-01-05  X1       14

完全符合你的需求。

额外注意事项

如果你的实际数据存在日期不连续的情况(比如某天没有记录),需要先生成完整的日期序列,重新索引填充缺失值后再做滑动窗口:

# 生成完整的日期范围
full_dates = pd.date_range(start=df['Date'].min(), end=df['Date'].max())
# 重新索引,缺失的行用NaN填充(你也可以根据业务需求填充0或其他值)
df_full = df.set_index('Date').reindex(full_dates).reset_index().rename(columns={'index': 'Date'})
# 再用上面的滑动窗口方法处理df_full即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:23:11