Pandas数据排序与分组

Pandas数据排序与分组

2026年9月20日·#编程学习/python学习笔记Python/数据分析·1067 字 5 分钟
浏览量加载中...
AI 摘要

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

数据排序:sort_values#

# 降序:销售数量从多到少
df.sort_values('销售数量', ascending=False)
# 升序:单价从小到大(ascending=True 是默认值,可以不写)
df.sort_values('单价', ascending=True)
df.sort_values('单价')
# 多列排序:先按第一列,第一列的值相同时才按第二列
df.sort_values(['单价', '销售数量'], ascending=[True, False])
Note

多列排序就像 Excel 的”多级排序”:ascending 要传列表,和前面的列一一对应。上面这句的含义是”单价升序,单价相同再看销售数量降序”。

数据分组:groupby#

分组操作就是把数据按照某个特征分成不同的组,然后对每个组分别进行统计计算。

df = pd.read_csv('data/sales.csv', nrows=20)
df['销售金额'] = df['单价'] * df['销售数量']
# 按"产品类别"分组,分别统计
df.groupby('产品类别')['订单号'].count() # 各组的订单数量
df.groupby('产品类别')['销售数量'].sum() # 各组的销售数量之和
df.groupby('产品类别')['销售金额'].sum() # 各组的销售金额之和
df.groupby('产品类别')['单价'].min() # 各组的最低单价
df.groupby('产品类别')['单价'].max() # 各组的最高单价
df.groupby('产品类别')['单价'].mean() # 各组的平均单价
聚合方法含义
count()统计数量
sum()求和
min() / max()最小值 / 最大值
mean()平均值

一次算多个指标:agg#

# 对同一列做多种聚合
df.groupby('产品类别')['单价'].agg(['mean', 'max', 'min'])
# 不同列做不同聚合(推荐写法):字典的键是列名,值是聚合方式
df.groupby('产品类别').agg({
'销售数量': 'sum',
'销售金额': 'sum',
'单价': 'mean',
})
Tip

“分组 + 聚合”是数据分析里出结论最快的一招:df.groupby(按什么分)[看哪一列].(算什么)。比如”各产品类别的销售金额合计”,一行代码就出来了。

相关#

练习题#

一、回忆填空(写完再展开对答案)#

  1. 排序用 df.____('列名', ascending=____);升序是 True,降序是 ____
  2. 多列排序:df.sort_values([列1, 列2], ascending=[____, ____]),会先按第 ____ 列排,相同时才按第二列
  3. 分组用 df.____('列名'),作用是按某特征分成不同组后分别做 ____ 计算
  4. 分组后统计数量用 ____()、求和用 ____()、平均值用 ____()、最值用 min()/max()
  5. 一次算多个指标用 ____()df.groupby('产品类别')['单价'].agg(['mean', 'max', 'min'])
  6. 不同列做不同聚合时,agg 里传 ____:{'销售数量': 'sum', '单价': 'mean'}
填空答案(做完再点开)
  1. sort_values / True / False 2. True, False / 一 3. groupby / 统计 4. count / sum / mean 5. agg 6. 字典

二、裸写题#

数据:data/sales.csv

  • 2-1 排序 按”销售数量”降序显示;再按”单价升序 + 销售数量降序”做多列排序,打印前 5 行。

    提示(先自己想,实在想不出再点开)

    一级 · 思路:单列排序传列名,多列排序传列表 + ascending 列表 二级 · 方法sort_values('销售数量', ascending=False) / sort_values(['单价', '销售数量'], ascending=[True, False]) 三级 · 骨架:结果用 .head(5) 看前 5 行

  • 2-2 分组统计 按”产品类别”分组,统计各类别的订单数量、销售数量之和。

    提示

    一级 · 思路df.groupby(按什么分)[看哪一列].(算什么) 二级 · 方法df.groupby('产品类别')['订单号'].count() / ['销售数量'].sum() 三级 · 骨架:先算出”销售金额”列再分组求和更有业务意义

  • 2-3 一行出多个指标 按”产品类别”分组,一次算出各类别的”平均单价、最高单价、最低单价”。

    提示

    一级 · 思路:同一列要多个指标 → 用 agg 传列表 二级 · 方法df.groupby('产品类别')['单价'].agg(['mean', 'max', 'min']) 三级 · 骨架:如果想再多一列”销售金额合计”,改用 agg 传字典

参考答案(做完再点开)
import pandas as pd
df = pd.read_csv('data/sales.csv')
df['销售金额'] = df['销售数量'] * df['单价']
# 2-1
print(df.sort_values('销售数量', ascending=False).head(5))
print(df.sort_values(['单价', '销售数量'], ascending=[True, False]).head(5))
# 2-2
print(df.groupby('产品类别')['订单号'].count())
print(df.groupby('产品类别')['销售数量'].sum())
# 2-3
print(df.groupby('产品类别')['单价'].agg(['mean', 'max', 'min']))
# 扩展:不同列不同聚合
print(df.groupby('产品类别').agg({'销售数量': 'sum', '销售金额': 'sum', '单价': 'mean'}))

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc3# CSS6# DeepSeek6# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP5# ImageManager1# Java23# java13# JavaScript5# JDBC3# JSON2# JUnit1# LangChain25# Logback1# Maven6# Muse Spark1# Mybatis1# MyBatis4# MySQL28# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python65# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue7# Waline3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端32# 动态1# 动漫1# 包1# 单词2# 博客7# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 对象1# 导航栏1# 工具2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程1# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常92# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试1# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]