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

如何用Pandas统计从首日到末日的每日记录数并按类别分列

Pandas实现连续日期的分类记录数统计

原始数据

import pandas as pd

df = pd.DataFrame({
    'day': ['2022-07-01', '2022-07-01', '2022-07-03', '2022-07-05', '2022-07-07', '2022-07-07'],
    'category': ['A', 'B', 'A', 'A', 'B', 'B'],
    'value': [1, 2, 3, 4, 5, 6]
})

完整解决方案代码

# 转换日期格式为datetime类型
df['day'] = pd.to_datetime(df['day'])

# 按日期+类别分组统计记录数,将类别转为列并填充缺失值为0
count_df = df.groupby(['day', 'category']).size().unstack(fill_value=0)

# 生成首尾日期之间的连续每日日期序列
full_date_range = pd.date_range(start=df['day'].min(), end=df['day'].max(), freq='D')

# 对齐连续日期、补全0并整理输出格式
result = count_df.reindex(full_date_range)\
                 .fillna(0)\
                 .astype(int)\
                 .reset_index()\
                 .rename(columns={'index': 'day'})

print(result)

步骤说明

  • 日期格式转换:把day列转为datetime类型,确保后续日期序列生成和索引对齐逻辑正常运行。
  • 分组统计:通过groupby按日期和类别分组,用size()统计每组记录数;unstack(fill_value=0)直接将类别取值转为列,同时给当前日期不存在的类别自动填充0。
  • 生成连续日期:使用pd.date_range生成从数据最早日期到最晚日期的连续每日序列,freq='D'指定按天生成。
  • 对齐补全:用reindex将统计结果的索引替换为连续日期,缺失日期对应的数值用fillna(0)补0,最后转整数类型、重置索引并修正列名,得到目标格式。

输出结果

day  A  B
0 2022-07-01  1  1
1 2022-07-02  0  0
2 2022-07-03  1  0
3 2022-07-04  0  0
4 2022-07-05  1  0
5 2022-07-06  0  0
6 2022-07-07  0  2

内容的提问来源于stack exchange,提问作者김진원

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:09:23