看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据分析工作中,我们经常会面对一类复杂的业务需求:既要按多个维度汇总数据,又要计算各种衍生指标,比如转化率、平均值、占比等。这类需求如果用 SQL 往往需要多次聚合和子查询,但在 pandas 中,我们可以借助 groupby()、pivot_table() 和 assign() 三个强大的函数链式完成。
本篇博文将通过一个销售场景案例,带你体会 pandas 的高效与优雅。
我们有一份电商平台的销售记录数据,每条记录包含以下信息:
日期:销售日期店铺:店铺名称商品:商品名称销量:售出数量销售额:销售金额访客数:当天访问店铺的人数我们的目标是:
源数据如下:
import pandas as pd
from io import StringIO
data = StringIO("""
日期,店铺,商品,销量,销售额,访客数
2025-10-01,天猫旗舰店,A商品,10,1200,200
2025-10-01,天猫旗舰店,B商品,6,720,200
2025-10-01,京东自营,A商品,8,960,150
2025-10-01,京东自营,C商品,5,750,150
2025-10-02,天猫旗舰店,A商品,12,1440,220
2025-10-02,京东自营,A商品,7,840,160
2025-10-02,京东自营,C商品,4,600,160
""")
df = pd.read_csv(data, parse_dates=['日期'])
我们希望最终得到的结果是这样的:
| 日期 | 店铺 | 销量 | 销售额 | 平均客单价 |
|---|---|---|---|---|
| 2025-10-01 | 天猫旗舰店 | 16 | 1920 | 120.00 |
| 2025-10-01 | 京东自营 | 13 | 1710 | 131.54 |
| 2025-10-02 | 天猫旗舰店 | 12 | 1440 | 120.00 |
| 2025-10-02 | 京东自营 | 11 | 1440 | 130.91 |
并且,还能生成一个透视表如下(销售额为指标):
| 日期 | 天猫旗舰店 | 京东自营 |
|---|---|---|
| 2025-10-01 | 1920 | 1710 |
| 2025-10-02 | 1440 | 1440 |
思路如下:
groupby(['日期', '店铺']) 对销量与销售额求和,得到基础汇总表;assign() 新增一列计算平均客单价;pivot_table() 生成销售额透视表(行是日期,列是店铺);代码如下:
result = (
df.groupby(['日期', '店铺'], as_index=False)[['销量', '销售额']]
.sum()
.assign(平均客单价=lambda x: (x['销售额'] / x['销量']).round(2))
)
pivot = (
df.pivot_table(index='日期',
columns='店铺',
values='销售额',
aggfunc='sum')
.fillna(0)
.astype(int)
)
print("=== 汇总表 ===")
print(result)
print("\n=== 销售额透视表 ===")
print(pivot)
代码分析:
groupby(...).sum():按日期、店铺分组汇总销量和销售额;assign():新增计算列,直接在链式调用中完成,无需额外变量;pivot_table():快速生成交叉汇总表,方便进一步可视化或导出;(完)
更新时间:2025-11-06 16:30:25 标签:pandas python 销售数据 指标计算