Pandas数据排序与分组

Pandas数据排序与分组

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

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

封面图
Pandas数据排序与分组 - 封面图

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

二、裸写题#

数据:data/sales.csv

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

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

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

    参考答案(做完再点开)
    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 分组统计 按”产品类别”分组,统计各类别的订单数量、销售数量之和。

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

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

    参考答案(做完再点开)
    # 2-2
    print(df.groupby('产品类别')['订单号'].count())
    print(df.groupby('产品类别')['销售数量'].sum())
  • 2-3 一行出多个指标 按”产品类别”分组,一次算出各类别的”平均单价、最高单价、最低单价”。

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

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

    参考答案(做完再点开)
    # 2-3
    print(df.groupby('产品类别')['单价'].agg(['mean', 'max', 'min']))
    # 扩展:不同列不同聚合
    print(df.groupby('产品类别').agg({'销售数量': 'sum', '销售金额': 'sum', '单价': 'mean'}))

评论区

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

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

了解更多
[ 音乐 ]
封面

音乐

暂未播放

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