国庆节10月1日
--


用 sort_values 做单列/多列排序,用 groupby 按特征分组并做 count/sum/min/max/mean 与 agg 聚合

1# 降序:销售数量从多到少2df.sort_values('销售数量', ascending=False)3
4# 升序:单价从小到大(ascending=True 是默认值,可以不写)5df.sort_values('单价', ascending=True)6df.sort_values('单价')7
8# 多列排序:先按第一列,第一列的值相同时才按第二列9df.sort_values(['单价', '销售数量'], ascending=[True, False])多列排序就像 Excel 的”多级排序”:ascending 要传列表,和前面的列一一对应。上面这句的含义是”单价升序,单价相同再看销售数量降序”。
分组操作就是把数据按照某个特征分成不同的组,然后对每个组分别进行统计计算。
1df = pd.read_csv('data/sales.csv', nrows=20)2df['销售金额'] = df['单价'] * df['销售数量']3
4# 按"产品类别"分组,分别统计5df.groupby('产品类别')['订单号'].count() # 各组的订单数量6df.groupby('产品类别')['销售数量'].sum() # 各组的销售数量之和7df.groupby('产品类别')['销售金额'].sum() # 各组的销售金额之和8df.groupby('产品类别')['单价'].min() # 各组的最低单价9df.groupby('产品类别')['单价'].max() # 各组的最高单价10df.groupby('产品类别')['单价'].mean() # 各组的平均单价| 聚合方法 | 含义 |
|---|---|
count() | 统计数量 |
sum() | 求和 |
min() / max() | 最小值 / 最大值 |
mean() | 平均值 |
1# 对同一列做多种聚合2df.groupby('产品类别')['单价'].agg(['mean', 'max', 'min'])3
4# 不同列做不同聚合(推荐写法):字典的键是列名,值是聚合方式5df.groupby('产品类别').agg({6 '销售数量': 'sum',7 '销售金额': 'sum',8 '单价': 'mean',9})“分组 + 聚合”是数据分析里出结论最快的一招:df.groupby(按什么分)[看哪一列].(算什么)。比如”各产品类别的销售金额合计”,一行代码就出来了。
df.sort_values('列名', ascending=True);升序是 True,降序是 Falsedf.sort_values([列1, 列2], ascending=[True, False]),会先按第一列排,相同时才按第二列df.groupby('列名'),作用是按某特征分成不同组后分别做统计计算count()、求和用 sum()、平均值用 mean()、最值用 min()/max()agg():df.groupby('产品类别')['单价'].agg(['mean', 'max', 'min']){'销售数量': 'sum', '单价': 'mean'}数据:data/sales.csv
2-1 排序 按”销售数量”降序显示;再按”单价升序 + 销售数量降序”做多列排序,打印前 5 行。
一级 · 思路:单列排序传列名,多列排序传列表 + ascending 列表
二级 · 方法:sort_values('销售数量', ascending=False) / sort_values(['单价', '销售数量'], ascending=[True, False])
三级 · 骨架:结果用 .head(5) 看前 5 行
1import pandas as pd2
3df = pd.read_csv('data/sales.csv')4df['销售金额'] = df['销售数量'] * df['单价']5
6# 2-17print(df.sort_values('销售数量', ascending=False).head(5))8print(df.sort_values(['单价', '销售数量'], ascending=[True, False]).head(5))2-2 分组统计 按”产品类别”分组,统计各类别的订单数量、销售数量之和。
一级 · 思路:df.groupby(按什么分)[看哪一列].(算什么)
二级 · 方法:df.groupby('产品类别')['订单号'].count() / ['销售数量'].sum()
三级 · 骨架:先算出”销售金额”列再分组求和更有业务意义
1# 2-22print(df.groupby('产品类别')['订单号'].count())3print(df.groupby('产品类别')['销售数量'].sum())2-3 一行出多个指标 按”产品类别”分组,一次算出各类别的”平均单价、最高单价、最低单价”。
一级 · 思路:同一列要多个指标 → 用 agg 传列表
二级 · 方法:df.groupby('产品类别')['单价'].agg(['mean', 'max', 'min'])
三级 · 骨架:如果想再多一列”销售金额合计”,改用 agg 传字典
1# 2-32print(df.groupby('产品类别')['单价'].agg(['mean', 'max', 'min']))3
4# 扩展:不同列不同聚合5print(df.groupby('产品类别').agg({'销售数量': 'sum', '销售金额': 'sum', '单价': 'mean'}))如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"生活不是等待暴风雨过去,而是学会在雨中跳舞。"—— 塞维涅夫人


