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

pandas对datetime字段按年份执行groupby操作不生效问题求解

问题原因

  • 对groupby接口的作用认知有误:df.groupby('foundation')返回的是Pandas的GroupBy分组中间对象,仅存储了分组的映射规则,不会直接将原DataFrame的行按年份重排,也不会直接输出按分组整理好的结构化结果。你直接查看原始数据或者未做聚合的GroupBy对象,看到的还是原始行顺序,自然会觉得没有完成分组。
  • 代码存在非核心的逻辑瑕疵:你给foundation字段的空值填充为0,后续转datetime格式时,0会被识别为Unix时间戳起点,对应年份为1970,若你对空值有其他处理预期会产生脏数据,但这不是分组不生效的核心原因。

解决方法

根据你的实际需求选择对应方案即可:

场景1:仅需要将行按年份顺序排列,同一年的数据放在一起展示

不需要调用groupby,直接对字段排序即可:

# ascending=True为升序,改为False可切换为降序
df_sorted = df.sort_values('foundation', ascending=True).reset_index(drop=True)
print(df_sorted)

场景2:需要按年份分组后做聚合统计(比如统计每年成立的公司数量、平均资产等)

需要在groupby后拼接聚合方法,才能得到分组后的统计结果:

# 示例:统计每年的公司数量
year_company_count = df.groupby('foundation')['name'].count().reset_index(name='company_count')
print(year_company_count)

# 示例:按年统计多个数值指标的平均值
year_stat = df.groupby('foundation').agg(
    avg_employee=('employee', 'mean'),
    avg_asset=('assets', 'mean'),
    avg_profit=('profit', 'mean')
).reset_index()
print(year_stat)

# 如果需要查看每个分组对应的所有原始数据,可遍历GroupBy对象
group_obj = df.groupby('foundation')
for year, data_in_year in group_obj:
    print(f"年份{year}的公司数据:")
    print(data_in_year)
    print("-"*60)

注意:不要直接将原始DataFrame变量df覆盖赋值为GroupBy对象,建议拆分变量存储,避免影响后续其他数据处理操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:15:00