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

Python新手求助:pandas处理Excel按日统计销售额及直方图绘制

解决你的Pandas数据统计与可视化问题

Hey there! Let's work through this step by step—since you're new to Python and pandas, I'll keep things clear and straightforward so you can wrap up that assignment quickly.

第一步:按日期自动统计总销售额(告别手动选列!)

首先,咱们得先确认你的数据结构,但我会覆盖两种最常见的情况,你可以对应着来:

情况1:你的数据是「长表」(每行是1小时的记录)

如果你的数据是每行对应一个小时的明细(比如列名包含日期、时段、Sales per hour、到店客数、成交客数),那直接用groupby分组求和就搞定,完全不用手动指定列范围:

import pandas as pd

# 先读取数据(你已经做过这步了,这里再确认下)
data = pd.read_excel("职场.xlsx")

# 按日期分组,计算每天的总销售额
daily_total_sales = data.groupby('日期')['Sales per hour'].sum().reset_index()

# 打印结果看看
print(daily_total_sales)

这个方法会自动把相同日期的所有小时销售额加起来,精准又省心!

情况2:你的数据是「宽表」(每行是1天,列是各小时的指标)

如果你的表格是按天排的行,列是每个时段的销售额、客数(比如列名是10:00_Sales、10:00_到店客数这类),那我们先筛选出所有销售额相关的列,再按行求和:

import pandas as pd

data = pd.read_excel("职场.xlsx")

# 筛选所有包含"Sales"的列(根据你的实际列名调整关键词)
sales_cols = [col for col in data.columns if 'Sales' in col]

# 计算每天的总销售额(假设你有"日期"列,要是行索引就是日期的话,去掉['日期']就行)
daily_total_sales = data[['日期'] + sales_cols].copy()
daily_total_sales['总销售额'] = daily_total_sales[sales_cols].sum(axis=1)

print(daily_total_sales)

第二步:绘制各天总销售额的可视化图

你提到要直方图,但其实对于「各天数值对比」来说,条形图会更直观(直方图一般用来展示数值分布)。这里两种都给你:

条形图(推荐用于日期对比)

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))
# 绘制条形图
plt.bar(daily_total_sales['日期'], daily_total_sales['总销售额'], color='skyblue')

# 添加标签和标题
plt.title('各天总销售额对比', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('总销售额', fontsize=12)
# 旋转日期标签避免重叠
plt.xticks(rotation=45)
plt.tight_layout()  # 自动调整布局
plt.show()

直方图(如果确实需要展示销售额分布)

plt.figure(figsize=(10, 6))
plt.hist(daily_total_sales['总销售额'], bins=5, color='orange', edgecolor='black')

plt.title('总销售额分布直方图', fontsize=14)
plt.xlabel('总销售额区间', fontsize=12)
plt.ylabel('天数', fontsize=12)
plt.tight_layout()
plt.show()

第三步:到店客数与成交客数的对比图

同样用分组求和+对比条形图来实现,还是分两种数据结构:

长表情况

# 先按日期汇总到店和成交客数
daily_customers = data.groupby('日期')[['到店客数', '成交客数']].sum().reset_index()

plt.figure(figsize=(10, 6))
x = range(len(daily_customers['日期']))
bar_width = 0.35

# 绘制两组对比条形
plt.bar([i - bar_width/2 for i in x], daily_customers['到店客数'], width=bar_width, label='到店客数', color='lightgreen')
plt.bar([i + bar_width/2 for i in x], daily_customers['成交客数'], width=bar_width, label='成交客数', color='salmon')

# 添加标签和标题
plt.title('各天到店客数vs成交客数', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('客数', fontsize=12)
plt.xticks(x, daily_customers['日期'], rotation=45)
plt.legend()  # 显示图例
plt.tight_layout()
plt.show()

宽表情况

# 筛选到店客数和成交客数的列
customer_in_cols = [col for col in data.columns if '到店客数' in col]
customer_deal_cols = [col for col in data.columns if '成交客数' in col]

# 汇总每天的客数
daily_customers = data[['日期']].copy()
daily_customers['到店客数'] = data[customer_in_cols].sum(axis=1)
daily_customers['成交客数'] = data[customer_deal_cols].sum(axis=1)

# 用上面同样的绘图代码就行
plt.figure(figsize=(10, 6))
x = range(len(daily_customers['日期']))
bar_width = 0.35

plt.bar([i - bar_width/2 for i in x], daily_customers['到店客数'], width=bar_width, label='到店客数', color='lightgreen')
plt.bar([i + bar_width/2 for i in x], daily_customers['成交客数'], width=bar_width, label='成交客数', color='salmon')

plt.title('各天到店客数vs成交客数', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('客数', fontsize=12)
plt.xticks(x, daily_customers['日期'], rotation=45)
plt.legend()
plt.tight_layout()
plt.show()

小提示:如果你的数据结构和上面的假设不太一样,可以运行print(data.head())把前几行数据贴出来,我可以帮你调整得更精准~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:08:00