当前位置: 首页 > news >正文

Python 数据分析与可视化 Day 4 - Pandas 数据筛选与排序操作

🎯 今日目标

  • 掌握 Pandas 中 groupby() 的使用方式
  • 学会使用 agg() 方法进行多个聚合
  • 掌握 pivot_table() 构建透视表
  • 结合分组与排序进行更深入的分析

🧮 一、基本分组统计(groupby)

✅ 分组 + 单列聚合

df.groupby("性别")["成绩"].mean()

输出(示例):

性别
女    75.2
男    72.3

✅ 分组 + 多列聚合

df.groupby("性别")[["成绩", "是否及格"]].mean()

🔧 二、自定义聚合(agg)

✅ 一个字段多个聚合函数

df.groupby("性别")["成绩"].agg(["mean", "max", "min", "count"])

✅ 多字段多个聚合函数

df.groupby("性别").agg({"成绩": ["mean", "std"],"是否及格": "sum"
})

📊 三、透视表(pivot_table)

pd.pivot_table(df, values="成绩", index="性别", columns="是否及格", aggfunc="mean")

可以理解为 Excel 中的“数据透视表”


🔁 四、结合分组后的排序

grouped = df.groupby("性别")["成绩"].mean().reset_index()
grouped.sort_values("成绩", ascending=False)

🧪 今日练习任务

继续使用 students_cleaned.csv,完成以下练习:

  1. 按性别统计学生人数

  2. 按性别统计平均成绩、最高分、最低分

  3. 按性别和是否及格双重分组,统计各组平均成绩

  4. 构建透视表,显示是否及格和性别的成绩均值交叉表

  5. 输出平均成绩最高的性别组

    import pandas as pd
    import os# 路径设置
    input_path = "data/students_cleaned.csv"if not os.path.exists(input_path):raise FileNotFoundError("❌ 找不到文件:data/students_cleaned.csv,请先运行清洗脚本。")# 加载数据
    df = pd.read_csv(input_path)
    print("✅ 已加载清洗后的学生数据:")
    print(df.head())# 1. 按性别统计人数
    print("\n👥 每个性别的学生人数:")
    print(df["性别"].value_counts())# 2. 按性别统计平均成绩、最高分、最低分
    print("\n📊 各性别的成绩统计:")
    gender_stats = df.groupby("性别")["成绩"].agg(["mean", "max", "min", "count"])
    print(gender_stats)# 3. 按性别 & 是否及格 进行双重分组统计平均成绩
    print("\n📊 按性别和是否及格分组的平均成绩:")
    multi_group = df.groupby(["性别", "是否及格"])["成绩"].mean()
    print(multi_group)# 4. 构建透视表:性别 vs 是否及格
    print("\n📊 透视表(性别 × 是否及格 → 平均成绩):")
    pivot = pd.pivot_table(df, values="成绩", index="性别", columns="是否及格", aggfunc="mean")
    print(pivot)# 5. 平均成绩最高的性别组
    print("\n🏆 平均成绩最高的性别:")
    top_group = gender_stats["mean"].idxmax()
    top_score = gender_stats["mean"].max()
    print(f"{top_group}(平均成绩:{top_score:.2f})")# 6. (可选)保存统计结果
    output_path = "data/gender_group_stats.csv"
    gender_stats.to_csv(output_path, encoding="utf-8")
    print(f"\n✅ 性别分组统计结果已保存到 {output_path}")
    

    输出示例:

    ✅ 已加载清洗后的学生数据:姓名 性别    成绩  是否及格
    0  张三   男  88.0   True
    1  李四   女  73.5   True
    2  王五   男  59.0  False
    3  田七   女  73.5  False👥 每个性别的学生人数:
    女    22
    Name: 性别, dtype: int64📊 各性别的成绩统计:mean   max   min  count
    性别                            
    女      73.5  73.5  73.5      273.5  88.0  59.0      2📊 按性别和是否及格分组的平均成绩:
    性别  是否及格
    女   False    73.5True      73.5False    59.0True      88.0
    Name: 成绩, dtype: float64📊 透视表(性别 × 是否及格 → 平均成绩):
    是否及格     False  True
    性别                    
    女         73.5  73.559.0  88.0🏆 平均成绩最高的性别:
    女(平均成绩:73.50)✅ 性别分组统计结果已保存到 data/gender_group_stats.csv
    

    gender_group_stats.csv在这里插入图片描述


📌 补充知识点

  • groupby() 默认返回的是“分组后对象”,需要用聚合函数 .mean().sum().agg() 等触发计算
  • 你可以使用 .reset_index() 将 groupby 的结果还原为 DataFrame 格式,便于后续排序、可视化等

✍️ 今日总结

  • 理解并掌握了 Pandas 中 groupby 的用法
  • 学会了使用 agg() 进行自定义多重聚合
  • 学会了构建透视表并进行交叉分析
  • 初步具备了分组维度下的深层次分析能力

题外话

在这里插入图片描述

相关文章:

  • 1928: 日期差值 codeup
  • I/O 多路复用
  • STM32 CAN位同步、错误处理
  • 数据赋能(308)——合作共享——数据交流
  • 小白的进阶之路系列之十八----人工智能从初步到精通pytorch综合运用的讲解第十一部分
  • 电池模块仿真 - 线性时不变降阶模型
  • 《情感反诈模拟器》2025学习版
  • Linux系统基本操作指令
  • Python-break、continue与else语句
  • 编程语言分类大全:从系统到AI开发
  • AI 辅助生成 Mermaid 流程图
  • Ubuntu20 搭建 Java、Redis、Nginx
  • 双向长短期记忆网络(BiLSTM)
  • Typecho handsome访客统计插件最新版VistorLoggerPro
  • 让宿主机能访问主机代理!
  • Vue.js数据代理与事件处理全解析:从原理到实践
  • 30天pytorch从入门到熟练(day1)
  • OJ搭建:Judge0服务器、DeepSeek服务接入简介
  • 基于SOA(海鸥优化算法)的路径规划Matlab实现方案
  • Java面试复习:深入理解Java基础、并发编程与JVM原理
  • 海外seo网站建设/百度如何发布作品
  • 自己做的网站突然打不开/杭州优化seo公司
  • 上海龙象建设集团公司网站/沈阳cms模板建站
  • 海南网站建设开发/小程序运营推广公司
  • 什么样的公司专业做网站的/seo网站优化公司
  • 太原企业网站制作公司/头条新闻今日头条官方版本