You need to enable JavaScript to run this app. Pandas如何按月份对DateTime数据分组并生成各月份独立DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何按月份对DateTime数据分组并生成各月份独立DataFrame

按月份拆分独立DataFrame的实现方案

你当前生成的分组对象a已经完成了数据的维度拆分,只需要补充遍历提取每个分组的逻辑,就能得到对应月份的独立DataFrame,不需要额外改造原有分组逻辑。

具体实现步骤

1. 沿用你原有代码的改造方式

你写的分组逻辑本身没有错误,只需要在分组完成后遍历每个分组,把对应子集保存下来即可,示例代码如下:

import pandas as pd

# pf为原始加载的数据集
pf.index = pd.to_datetime(pf['DateTime'])
# 给分组键加命名,避免后续遍历的时候读不懂分组维度
a = pf.groupby(by=[pf.index.year.rename("year"), pf.index.month.rename("month")])

# 用字典存储拆分后的月份DataFrame,比硬编码df1、df2更灵活
month_df_map = {}
for (year, month), single_month_df in a:
    # 拼接成标准月份标识,比如2012-05
    month_key = f"{year}-{str(month).zfill(2)}"
    # 把索引重置为默认数字索引,和你示例的输出格式对齐
    month_df_map[month_key] = single_month_df.reset_index(drop=True)

2. 更简洁的pandas官方推荐写法

比起手动提取年、月作为分组键,可以直接用pd.Grouper指定按月频率分组,代码更简洁也不容易踩跨年份的坑:

# 先把DateTime列转换为时间格式
pf["DateTime"] = pd.to_datetime(pf["DateTime"])
# 直接按DateTime列的月维度分组
grouped = pf.groupby(pd.Grouper(key="DateTime", freq="M"))

month_df_map = {}
for month_end_time, single_month_df in grouped:
    # 跳过没有数据的空分组
    if len(single_month_df) == 0:
        continue
    # 生成月份标识作为字典键
    month_key = month_end_time.strftime("%Y-%m")
    month_df_map[month_key] = single_month_df.reset_index(drop=True)

获取目标月份的DataFrame

完成上述拆分后,直接通过字典键取值即可得到你需要的独立DataFrame:

  • 2012年5月的数据:df1 = month_df_map["2012-05"],输出内容和你示例的5月销售记录完全一致
  • 2012年6月的数据:df2 = month_df_map["2012-06"],输出内容和你示例的6月销售记录完全一致

注意事项

  • 不推荐硬编码将每个分组赋值给df1、df2这类固定变量,后续新增月份数据时需要频繁修改代码,还容易因为分组数量变化触发索引错误
  • 用分组字典存储的方式可以适配任意数量的月份分组,不需要手动调整变量定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 18:54:03