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

基于Pandas的月度日期数据统计与柱状图绘制咨询

解决Pandas日期分组统计与柱状图绘制问题

我来帮你搞定这个年月维度的统计和绘图需求!你的核心问题是没把Case_Date转换成标准日期类型并提取年月信息,直接按原始日期分组会得到每天的统计结果,而非你需要的12个年月汇总。下面是完整的实现方案:

步骤1:正确解析日期列

首先要把字符串格式的日期转换成Pandas可处理的datetime类型,这样才能轻松提取年月:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 读取数据(保留你原有的列名清洗逻辑)
data = pd.read_csv(r'C:\Users\rmond\Downloads\PS_csvFile1.csv', error_bad_lines=False, encoding="ISO-8859-1", skiprows=6)
cols = data.columns
cols = cols.map(lambda x: x.replace(' ', '_') if isinstance(x, str) else x)
data.columns = cols

# 按你的日期格式"01-Jan-2018"解析为datetime类型
data['Case_Date'] = pd.to_datetime(data['Case_Date'], format='%d-%b-%Y')

步骤2:提取年月并分组统计

添加一个新列存储"Jan-2018"格式的年月信息,再按这个列做聚合统计:

场景1:统计每个年月的记录数量

如果需要知道每个月有多少条数据:

# 生成"Jan-2018"格式的年月列
data['Year_Month'] = data['Case_Date'].dt.strftime('%b-%Y')

# 按年月分组计数
monthly_counts = data.groupby('Year_Month').size().reset_index(name='Record_Count')

场景2:统计某数值列的每月总量

如果需要统计比如Transaction_Amount这类列的月度总和:

data['Year_Month'] = data['Case_Date'].dt.strftime('%b-%Y')
monthly_totals = data.groupby('Year_Month')['Transaction_Amount'].sum().reset_index(name='Total_Amount')

步骤3:绘制12个柱状条的图表

用处理好的统计数据生成清晰的柱状图,这里用seaborn优化视觉效果:

# 设置绘图风格
sns.set_style("whitegrid")

# 以记录数量统计为例(总量统计只需替换成monthly_totals)
plt.figure(figsize=(12, 6))
sns.barplot(x='Year_Month', y='Record_Count', data=monthly_counts, palette='coolwarm')

# 添加图表标题和标签
plt.title('2018 Monthly Record Statistics', fontsize=14)
plt.xlabel('Year-Month', fontsize=12)
plt.ylabel('Number of Records', fontsize=12)

# 旋转x轴标签避免重叠
plt.xticks(rotation=45)

# 自动调整布局,防止标签被截断
plt.tight_layout()
plt.show()

原代码失效原因说明

你之前的data.groupby('Case_Date').mean().plot(kind='bar')是按每一天分组计算均值,所以会生成大量柱状条,完全不符合你要的年月维度汇总。通过转换日期格式并提取年月,我们才能把数据聚合到你需要的时间粒度上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:05:20