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

如何按6个月日期周期拆分带日期索引的Pandas DataFrame

Pandas 按固定6个月周期拆分Datetime索引DataFrame方案

核心实现步骤

  • 首先确保DataFrame的索引为DatetimeIndex类型:
import pandas as pd
# 非DatetimeIndex先做转换
df.index = pd.to_datetime(df.index)
  • 生成间隔6个月的时间切割区间:
start_date = pd.to_datetime("2010-10-18")
# 动态计算需要的切割点数量,覆盖所有数据范围
total_months = (df.index.max() - start_date).days // 30 + 1
bin_count = total_months // 6 + 2
date_bins = pd.DatetimeIndex([start_date + pd.DateOffset(months=6*i) for i in range(bin_count)])
  • 打周期标签并拆分出子DataFrame:
# 给每行数据分配所属周期
df["period_tag"] = pd.cut(
    df.index, 
    bins=date_bins, 
    labels=[f"period_{i+1}" for i in range(len(date_bins)-1)],
    include_lowest=True
)
# 拆分结果存为字典,key为周期名,value为对应子DataFrame
period_df_dict = {
    period_name: group.drop("period_tag", axis=1) 
    for period_name, group in df.groupby("period_tag", observed=True)
}

调用方式

直接通过字典读取对应周期的子DataFrame即可,示例:

# 读取第一个周期数据
period_1 = period_df_dict["period_1"]
# 读取第二个周期数据
period_2 = period_df_dict["period_2"]

如果需要直接生成period_1、period_2这类全局变量,可以追加以下代码(更推荐用字典存储,维护成本更低):

for period_name, period_df in period_df_dict.items():
    globals()[period_name] = period_df

补充说明

  • 示例代码是严格按照「起始日+N个6个月」作为区间边界,比如period_1的区间为2010-10-18到2011-04-18,符合对周期边界的要求。
  • 如果需要调整为自然月首日作为边界,只需把生成date_bins的代码替换为date_bins = pd.date_range(start=start_date, end=df.index.max(), freq="6MS")即可。

内容的提问来源于stack exchange,提问作者Deng-guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 07:33:03