Pandas时间序列分析:1996-2016年各月发布商总量统计需求
解决Pandas跨年份月度发布商总数统计问题
嗨,我完全get到你的需求了——不是按每年拆分后算月度,而是把1996到2016年所有年份的同一个月份合并起来,统计每个月的唯一发布商总数对吧?这其实是个典型的跨时间维度聚合问题,用Pandas几步就能搞定:
核心思路
- 确保时间列是
datetime类型(Pandas处理时间的基础前提) - 过滤出1996-2016年的目标数据范围
- 按纯月份(而非“年-月”组合)分组,统计发布商的唯一值数量
具体代码实现
假设你的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
相关产品推荐
相关产品推荐

