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

如何让Pandas DataFrame按月份展示数据并包含点击量为0的月份?

解决按月份统计点击量并包含0值月份的方法

步骤1:读取并预处理数据

假设你用pandas.read_sql从数据库拉取数据,先确保date_clicked是datetime类型:

import pandas as pd
import sqlalchemy

# 替换成你的数据库连接字符串
engine = sqlalchemy.create_engine('your_database_connection_string')
df = pd.read_sql('SELECT date_clicked FROM Click', engine)

# 转成datetime类型(如果数据库返回的是字符串格式)
df['date_clicked'] = pd.to_datetime(df['date_clicked'])

步骤2:生成完整的月份序列

先确定统计的时间范围(比如从数据里最早的点击月份到最晚的),然后生成无遗漏的月份序列:

# 提取数据中的首尾月份(Period类型,精准对应月份)
min_month = df['date_clicked'].dt.to_period('M').min()
max_month = df['date_clicked'].dt.to_period('M').max()

# 生成覆盖首尾的完整月份序列
full_months = pd.period_range(start=min_month, end=max_month, freq='M')

步骤3:按月份分组统计点击量

把日期转成月份周期后分组计数:

# 按月份分组,统计每个月的点击次数
monthly_clicks = df.groupby(df['date_clicked'].dt.to_period('M'))['date_clicked'].count().rename('click_count')

步骤4:补全0值月份

用完整月份序列重新索引,缺失的月份自动填充0:

# 重新索引,补全无点击月份的0值
monthly_clicks_full = monthly_clicks.reindex(full_months, fill_value=0)

# 可选:把Period类型转成datetime格式(方便后续绘图时的轴显示)
monthly_clicks_full = monthly_clicks_full.reset_index()
monthly_clicks_full['index'] = monthly_clicks_full['index'].dt.to_timestamp()
monthly_clicks_full.rename(columns={'index': 'month'}, inplace=True)

直接绘图

现在monthly_clicks_full就是包含所有月份(包括点击量为0的)的DataFrame,直接用来画柱状图:

import matplotlib.pyplot as plt

monthly_clicks_full.plot(x='month', y='click_count', kind='bar')
plt.xlabel('月份')
plt.ylabel('点击量')
plt.title('URL每月点击量统计')
plt.show()

关键逻辑说明

  • 用dt.to_period('M')把日期转成月份周期,确保分组是严格按自然月划分,不会出现跨月误差
  • period_range生成的序列是完整的月份集合,从根源上避免遗漏无点击的月份
  • reindex配合fill_value=0一键补全缺失值,不用手动处理空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:52:52