如何按固定天数块拆分含datetime类型日期列的Pandas DataFrame
按连续N天拆分Pandas DataFrame的解决方案
既然你的Datetime列已经是datetime对象,那我们可以利用日期的时间差生成分组键,精准按连续N天拆分数据,替代原来按行数拆分的逻辑。下面是具体实现步骤和代码:
步骤1:优化数据结构(可选但推荐)
如果Datetime列还不是索引,建议先将它设置为索引,后续日期计算会更便捷:
data = data.set_index('Datetime')
步骤2:生成连续N天的分组标识
我们先定位数据中的最早日期,再计算每一行日期与最早日期的天数差,最后将差值除以你指定的天数num(比如10)并取整,得到的结果就是每行所属的分组ID:
import pandas as pd num = 10 # 每组包含的天数 # 获取数据中的最早日期 min_date = data.index.min() # 计算每个日期对应的分组ID data['group_id'] = (data.index - min_date).days // num
步骤3:按分组ID拆分DataFrame
用groupby按group_id分组,再把每个组的DataFrame提取到列表中:
# 提取所有分组的DataFrame到列表 results = [group for _, group in data.groupby('group_id')] # 如果不需要保留group_id列,可以在提取后删除 results = [group.drop('group_id', axis=1) for _, group in data.groupby('group_id')]
补充说明
- 拆分后,第一个分组包含从最早日期开始的前10天所有数据,第二个分组是接下来的10天,以此类推;
- 如果最后一组的天数不足10天,它会被保留为列表的最后一个元素,你可以根据需求决定是否丢弃;
- 如果Datetime列不是索引,只需把代码中的
data.index替换为data['Datetime']即可适配。
内容的提问来源于stack exchange,提问作者Shulas
相关产品推荐
相关产品推荐

