Python 数据分析 09:数据分组 —— 思路自述
目标:按产品类别分组,统计各类别的数量、销售额、单价等指标。
先上代码
import pandas as pd
# 读取文件
df = pd.read_csv('data/sales.csv', nrows=20)
# 计算销售金额(销售数量 × 单价),供后续分组统计使用
df['销售金额'] = df['销售数量'] * df['单价']
# 1.1 各类别的订单数量
var1 = df.groupby('产品类别')['订单号'].count()
# 1.2 各类别的销售数量之和
var2 = df.groupby('产品类别')['销售数量'].sum()
# 1.3 各类别的销售金额之和
var3 = df.groupby('产品类别')['销售金额'].sum()
# 1.4 各类别的最低商品单价
var4 = df.groupby('产品类别')['单价'].min()
# 1.5 各类别的最高商品单价
var5 = df.groupby('产品类别')['单价'].max()
# 1.6 各类别的平均商品单价
var6 = df.groupby('产品类别')['单价'].mean().round(2)
# 1.7 一次算出最低、最高、平均单价
var7 = df.groupby('产品类别')['单价'].agg(['min', 'max', 'mean']).round(2)
# 1.8 命名聚合:销售数量之和、销售金额之和、平均单价
var8 = df.groupby('产品类别').agg(
销售数量之和=('销售数量', 'sum'),
销售金额之和=('销售金额', 'sum'),
平均单价=('单价', lambda x: round(x.mean(), 2))
)
var8
我的思路:“分组—套娃—汇总”三步
分组核心是 split-apply-combine:先按某列把数据劈成几堆(groupby),再对每堆各自算账(聚合),最后拼回一张表。
var1 到 var6 就是这个套路换不同聚合函数:count 数订单、sum 求和、min/max/mean 得最值均值,均价后面 .round(2) 收小数位。
先造一个派生列
统计销售额前,表里没有“金额”列,得先造:
df['销售金额'] = df['销售数量'] * df['单价']
整列相乘是向量化运算,不写 for 循环,一行算完每单金额,var3 才能按类别求总营收。
聚合的两种进阶写法
一是 agg 一次算多个。 var7 用 ['单价'].agg(['min','max','mean']) 把最值加均值一次摆平,不用分三次调用再拼。
二是命名聚合造干净结果表。 var8 是我最欣赏的写法:每个 新名字=(源列, 函数),还能塞 lambda 做四舍五入这种自定义加工,出来的表自带中文列名,直接就是能汇报的成品。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/W20070611/article/details/168027742




