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

如何使用groupby按每365行分组统计指定列各数值出现次数

按每365行分组统计列值出现次数的实现方法

你的数据集是严格按时间顺序排列、每年固定365行、总计11315行的结构化表,直接用行号生成分组键调用groupby即可,不需要额外解析日期字段。

具体实现代码

假设你已经将数据集读取为pandas DataFrame,变量名为df,将代码中的目标列替换为你自己的实际列名即可运行:

import pandas as pd
import numpy as np

# 替换为你要统计的实际列名
target_column = "你的目标列名"

# 每365行生成同一个分组ID,作为groupby的分组依据
group_key = np.arange(len(df)) // 365

# 分组统计各取值出现次数,转成宽表格式,缺失值填充0
stat_result = df.groupby(group_key)[target_column].value_counts().unstack(fill_value=0)

# 固定列顺序为5、7、8、9,避免列排序随机
stat_result = stat_result.reindex(columns=[5, 7, 8, 9], fill_value=0)

# 可选:将分组索引从0-30改为1-31,对应第1到第31年
stat_result.index = range(1, 32)

结果说明

最终输出的stat_result结构如下:

  • 行索引:对应年份分组,共31行
  • 列:分别对应取值5、7、8、9
  • 单元格值:对应取值在当年365行数据中的出现次数

关键逻辑说明

  • 分组键用np.arange(len(df)) // 365生成:行序号0-364整除365得到分组0、365-729得到分组1,以此类推,刚好将11315行拆分为31个每组365行的分组,完全匹配按年拆分的需求,性能远高于日期解析类方法。
  • value_counts()直接统计每个分组内目标列各取值的出现频次,不需要手动编写计数逻辑。
  • unstack(fill_value=0)将多层索引的计数结果转为宽表格式,某分组未出现的取值会自动填充为0,不会残留空值。
  • 最后用reindex固定列顺序为5、7、8、9,避免pandas自动排序导致的列顺序混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:21:21