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

如何基于datetime列生成月/小时组合计数的热力图?

月-小时事件计数热力图实现方案

问题背景

你的数据集created_at列是UTC格式的字符串时间,需要生成x轴为1-23小时、y轴为1-12月份的热力图,展示每个月-小时组合的事件计数。

错误分析

你原代码的核心问题:

  • grouped.rename(columns={"Hour":"Count"})未重新赋值,导致后续无法引用Count列
  • 分组计数后无需再用pivot_table,直接转换为二维表格即可

正确实现步骤

1. 转换时间格式并提取月/小时字段

先一次性将字符串时间转为datetime类型,避免重复计算:

# 转换为datetime类型(UTC格式会自动识别)
df['created_at'] = pd.to_datetime(df['created_at'])
# 提取月份(1-12)和小时(0-23,若需1-23则加1)
df['Month'] = df['created_at'].dt.month
df['Hour'] = df['created_at'].dt.hour  # 若要1-23小时,改为df['created_at'].dt.hour + 1

2. 生成月-小时计数的二维表格

推荐两种简便方法:

方法一:直接用crosstab生成(最快捷)
# 直接统计每个月-小时的事件数,缺失组合自动填充0
heatmap_data = pd.crosstab(df['Month'], df['Hour'])
方法二:分组计数后转二维表格
# 按月份和小时分组,统计每组数量
grouped_counts = df.groupby(['Month', 'Hour']).size()
# 转换为二维表格,缺失的月-小时组合填充0
heatmap_data = grouped_counts.unstack(fill_value=0)

3. 绘制热力图

使用seaborn绘制带数值标注的热力图:

import seaborn as sns
import matplotlib.pyplot as plt

# 设置画布大小
plt.figure(figsize=(14, 7))
# 绘制热力图,cmap可选配色,annot显示数值,fmt指定整数格式
sns.heatmap(heatmap_data, 
            cmap='Blues', 
            annot=True, 
            fmt='d',
            xticklabels=range(1, 24),  # x轴显示1-23
            yticklabels=range(1, 13))  # y轴显示1-12
# 设置轴标签和标题
plt.xlabel('小时')
plt.ylabel('月份')
plt.title('各月份不同小时的事件计数热力图')
# 展示图表
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:01:13