当前位置: 首页 > 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() 进行自定义多重聚合
  • 学会了构建透视表并进行交叉分析
  • 初步具备了分组维度下的深层次分析能力

题外话

在这里插入图片描述

http://www.lryc.cn/news/573705.html

相关文章:

  • Maven生命周期,测试
  • Python期末速成
  • Flink图之间流转解析:从逻辑构建到物理执行的深度剖析
  • 集群聊天服务器---muduo库的使用
  • 无锡哲讯科技:助力纺织业搭乘 SAP 数字化快车
  • 颠覆传统接口测试!用 Streamlit + SQLite + GPT 打造可视化自动化平台
  • Linux安全基石:Shell运行原理与权限管理系统解读
  • 企业级安全实践:SSL 加密与权限管理(二)
  • 设计模式精讲 Day 10:外观模式(Facade Pattern)
  • Java面试复习:基础、面向对象、多线程、JVM与Spring核心考点
  • 药房智慧化升级:最优成本条件下开启地市级医院智慧医疗新变革
  • c#多线程中的字典键值对象ConcurrentDictionary线程安全
  • 《HTTP权威指南》 第14章 安全HTTP
  • 【JS-4.4-键盘常用事件】深入理解DOM键盘事件:提升用户交互体验的关键
  • “MOOOA多目标鱼鹰算法在无人机多目标路径规划
  • leetcode:面试题 08.01. 三步问题
  • Linux 无线网络驱动开发 之 子系统源码框架(nl80211、cfg80211、mac80211)
  • 【weaviate】分布式数据写入之LSM树深度解析:读写放大的权衡
  • 计算机网络通信技术与协议(九)————交换机技术
  • flink如何支持kafka容灾自动切换
  • C++,Qt事件处理机制编程开发练习全解析,23000字解析!!
  • 二、Generative adversarial network (GAN)
  • 深入理解Spring MVC:构建灵活Web应用的基石
  • Elasticsearch Kibana (一)
  • React纯函数和hooks原理
  • 开发语言本身只是提供了一种解决问题的工具
  • Qt应用中处理Linux信号:实现安全退出的技术指南
  • 对射式红外传感器计次旋转编码器计次
  • 消息队列:基本知识
  • day039-nginx配置补充