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

使用Pandas的pd.Grouper分组后仅显示一个分区,如何获取全部分组?

解决pd.Grouper分组仅显示一个分区的问题

看起来你遇到的问题大概率是旧版本pandas的兼容性bug导致的,不过没关系,咱们可以用几种方法快速解决:

先排查基础问题

首先确认你的date列确实被正确转换成了datetime类型,执行这段代码检查:

print(df.dtypes)

如果date列的类型不是datetime64[ns],说明转换过程可能出了问题,你可以改用更明确的转换方式:

df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')

解决方案1:升级pandas版本

旧版本的pandas在pd.Grouper与分组列组合使用时,偶尔会出现分组键生成不完整的bug。升级到最新稳定版本通常就能搞定这个问题:

pip install --upgrade pandas

升级后再运行你原来的分组代码,应该就能看到所有预期的分组键了。

解决方案2:替代pd.Grouper,直接提取月份周期分组

如果不想升级版本,或者想要更直观的分组方式,可以直接从date列中提取年月周期来分组,这种方法兼容性更好:

# 方式1:先创建月份列再分组
df['month'] = df['date'].dt.to_period('M')
g = df.groupby(['zone', 'month'])

# 方式2:直接在groupby中使用,无需额外列
g = df.groupby(['zone', df['date'].dt.to_period('M')])

此时查看分组键:

print(g.groups.keys())

会得到所有预期的分组:

dict_keys([('AL', Period('2014-01')), ('BS', Period('2014-01')), ('RF', Period('2014-01'))])

这种方法的优势是,Period类型保留了时间序列的特性,后续做时间相关分析会更方便;如果偏好字符串格式的年月,也可以用df['date'].dt.strftime('%Y-%m')替代dt.to_period('M')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:33:50