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

Pandas时间序列分析:1996-2016年各月发布商总量统计需求

解决Pandas跨年份月度发布商总数统计问题

嗨,我完全get到你的需求了——不是按每年拆分后算月度,而是把1996到2016年所有年份的同一个月份合并起来,统计每个月的唯一发布商总数对吧?这其实是个典型的跨时间维度聚合问题,用Pandas几步就能搞定:

核心思路

  1. 确保时间列是datetime类型(Pandas处理时间的基础前提)
  2. 过滤出1996-2016年的目标数据范围
  3. 按纯月份(而非“年-月”组合)分组,统计发布商的唯一值数量

具体代码实现

假设你的DataFrame名为df,时间列叫release_date,发布商列叫publisher(如果列名不同,直接替换成你实际的列名即可):

1. 转换并清洗时间列

先把时间列转成标准datetime格式,同时处理可能的缺失值或无效时间:

import pandas as pd

# 转换时间列,无法识别的格式转为NaN
df['release_date'] = pd.to_datetime(df['release_date'], errors='coerce')

# 过滤掉时间或发布商为空的行,避免统计误差
clean_df = df.dropna(subset=['release_date', 'publisher'])

2. 筛选目标年份范围

只保留1996到2016年的数据,排除超出范围的年份:

target_df = clean_df[(clean_df['release_date'].dt.year >= 1996) & (clean_df['release_date'].dt.year <= 2016)]

3. 按月份分组统计唯一发布商数

这里的关键是用dt.month提取纯月份(1-12),然后用nunique()统计唯一值(别用count(),它会重复计算同一个发布商的多次出现):

# 按月份分组,统计唯一发布商数量
monthly_publisher_count = target_df.groupby(target_df['release_date'].dt.month)['publisher'].nunique()

# 把月份数字替换成中文名称,结果更直观
monthly_publisher_count.index = ['一月', '二月', '三月', '四月', '五月', '六月', 
                                 '七月', '八月', '九月', '十月', '十一月', '十二月']

# 输出最终结果
print(monthly_publisher_count)

关键注意点

  • 必须用nunique():如果同一个发布商在不同年份的同一个月都有数据,我们只需要统计一次,count()会把所有出现次数累加,不符合你的需求
  • 时间转换加errors='coerce':能自动处理格式错误的时间数据,避免后续代码报错
  • 如果需要英文月份显示,把索引换成['January', 'February', ..., 'December']即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:37:14