数据分析:合并一

🔷 DA37:统计运动会项目报名人数(仅输出有人报名的项目)

✅ 题目描述

给定两个 CSV 文件:

  • items.csv:包含项目信息(item_id, item_name, location)
  • signup.csv:包含员工报名信息(employee_id, name, sex, department, item_id)

要求:统计每个项目的报名人数,只输出报名人数不为 0 的项目。

💡 即:只要有人报了的项目才显示。


✅ 正确代码

import pandas as pddf_items = pd.read_csv('items.csv', sep=',')
df_signup = pd.read_csv('signup.csv', sep=',')# 内连接合并,自动过滤没有报名记录的项目
df_merge = pd.merge(df_items, df_signup, on='item_id')# 按项目名称分组,统计 employee_id 的数量
result = df_merge.groupby('item_name')['employee_id'].size()print(result)

🔍 代码解析

解释
pd.merge(..., on='item_id')使用 item_id 作为键进行内连接(默认),只有在两个表中都存在的项目才会保留 → 自动排除无人报名的项目
.groupby('item_name')按“项目名称”分组
['employee_id'].size()统计每组中有多少条记录(即报名人数)<br>⚠️ 注意:size() 包括 NaN 值;若用 count() 则会跳过 NaN(更安全)
print(result)输出 Series:索引是项目名,值是人数

✅ 特点:使用 inner join(默认),天然只保留有报名数据的项目。


🧠 扩展知识

知识点说明
merge() 默认行为不指定 how 时,默认为 'inner',即只保留两表共有的 key
groupby().size() vs .count()<ul><li>size():返回每组总行数,包括 NaN</li><li>count():对各列统计非空值个数</li></ul>在此场景下两者等价(employee_id 不为空)
输出格式返回的是一个 Series,打印时自动省略列名,符合题目要求

🔷 DA38:统计运动会项目报名人数(二)—— 包含无人报名的项目

✅ 题目描述

同上,但这次要求:

输出 items.csv 中所有项目的报名人数,即使没人报名也显示为 0。


✅ 正确代码

import pandas as pddf_items = pd.read_csv('items.csv', sep=',')
df_signup = pd.read_csv('signup.csv', sep=',')# 左连接:以 items 为主表,保留所有项目
df_merge = pd.merge(df_items, df_signup, on='item_id', how='left')# 分组并使用 count 统计非空 employee_id 数量
result = df_merge.groupby('item_name')['employee_id'].count()print(result)

🔍 代码解析

关键点解释
how='left'左连接,确保 df_items 中的所有项目都被保留<br>→ 即使没人报名,也会出现在结果中,employee_id 为 NaN
.count()只统计非 NaN 的值 → 无人报名则为 0
groupby('item_name')按项目名聚合
print(result)输出所有项目及其报名人数(含 0)

✅ 核心思想:主表驱动 + left join + count 处理缺失值


🧠 扩展知识

技巧应用场景
left join主表完整、从表补充信息的经典模式(如商品+销量)
fillna(0)如果你想显式补零:df_merge['employee_id'].fillna(0)
reindex()若想确保所有项目按 items.csv 顺序出现,可用 reindex

🔷 DA39:多报名表的运动项目人数统计

✅ 题目描述

新增一个文件 signup1.csv,是另一个部门的报名数据。 要求:将 signup.csvsignup1.csv 合并后,再统计各项目的报名人数(只输出有人报名的)。


✅ 正确代码

import pandas as pditem = pd.read_csv("items.csv", sep=",")
sign = pd.read_csv("signup.csv", sep=",")
sign1 = pd.read_csv("signup1.csv", sep=",")# 上下拼接两个报名表
sign_m = pd.concat([sign, sign1], axis=0)# 与项目表内连接
m = pd.merge(sign_m, item, how="inner", on="item_id")# 按项目名分组,统计员工数量
print(m.groupby("item_name")["employee_id"].count())

🔍 代码解析

步骤说明
pd.concat([sign, sign1], axis=0)将两个报名表纵向堆叠(union),合并成一张大报名表
axis=0沿行方向拼接(上下接)
merge(..., how='inner')只保留存在于 items.csv 中的项目(防止无效 item_id)
groupby().count()统计每个项目的总报名人数(来自两个文件)

✅ 重点:先合并报名数据,再关联项目信息。


🧠 扩展知识

方法用途
pd.concat([...], ignore_index=True)重置行索引,避免重复 index
append() 已弃用推荐使用 concat 替代
去重处理若担心重复报名:sign_m.drop_duplicates(subset=['employee_id', 'item_id'])

🔷 DA40:统计职能部门中报名标枪的员工信息

✅ 题目描述

找出 职能部门(functional) 中报名了 标枪(javelin) 的所有员工,并输出他们的:

  • employee_id
  • name
  • sex

⚠️ 注意:结果要重置索引(从 0 开始连续编号)


✅ 正确代码

import pandas as pd df1 = pd.read_csv("items.csv", sep=',')
df2 = pd.read_csv("signup.csv", sep=',')# 先合并项目和报名信息
df = pd.merge(df1, df2, on='item_id')# 筛选条件:部门是 functional,项目是 javelin
df_fun = df[(df.department == 'functional') & (df.item_name == "javelin")]# 选择指定列并重置索引
result = df_fun[["employee_id", "name", "sex"]].reset_index(drop=True)print(result)

🔍 代码解析

步骤说明
pd.merge(..., on='item_id')获取每个报名记录对应的项目名称
(df.A == X) & (df.B == Y)多条件筛选,注意括号和 &(不能用 and
df[[...]]选取特定列
.reset_index(drop=True)重新生成从 0 开始的整数索引,丢弃原索引

✅ 输出是一个 DataFrame,结构清晰。


🧠 扩展知识

技术点提示
条件逻辑运算符<ul><li>&:且</li><li>&#124;:或</li><li>~:非</li></ul>必须加括号!
字符串匹配若不确定拼写可用:<br>df.item_name.str.contains('javelin', case=False)
query() 方法更简洁的筛选方式:<br>df.query("department == 'functional' and item_name == 'javelin'")
drop=True避免旧索引变成新列

📚 总结对比表(四题核心差异)

题号目标关键操作连接方式聚合/筛选
DA37有人报名的项目人数merge + groupby + sizeinner (default)只输出有数据的
DA38所有项目(含0人)merge + left + countleft显示0人项目
DA39多报名表汇总concat + merge + countinner合并多个源数据
DA40特定人群信息查询merge + 多条件筛选 + 列选择inner输出明细数据

🛠️ 通用技巧总结

场景推荐做法
合并多个 CSV 报名表pd.concat([df1, df2], axis=0)
关联项目信息pd.merge(..., on='item_id')
统计数量groupby().size() 或 .count()
保留主表全部数据how='left'
筛选满足多个条件的数据(cond1) & (cond2)
输出前清理索引.reset_index(drop=True)
防止拼写错误检查字段名:df.columns.tolist()

✅ 学习建议

  1. 动手实践:把这几道题的数据自己构造出来跑一遍。
  2. 理解 merge 类型:inner/left/right/outer 的区别是关键。
  3. 掌握 groupby 和 count/size:数据分析最常用组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/922470.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WWW‘25一通读 |图Anomaly/OOD检测相关文章(1)

写在前面&#xff1a;进入新一轮学习阶段&#xff0c;从阅读开始。 本文分享的是WWW2025收录的与作者研究相近的graph-based xx相关paper的阅读笔记&#xff0c;含个人理解&#xff0c;仅供参考&#x1f604; 0x01 HEI&#xff1a;利用不变性原理实现异配图结构分布偏移学习 J…

static_cast:C++类型系统的“正经翻译官”

1. 背景与核心概念 1.1 C的“类型安全”哲学 想象一下&#xff0c;你所在的世界突然失去了所有规则&#xff1a;文字可以随意变成数字&#xff0c;人可以瞬间变成椅子&#xff0c;汽车能飞上天变成飞机… 这听起来像是疯狂的梦境&#xff0c;但对于早期C语言来说&#xff0c;这…

【嵌入式原理系列-第八篇】USART从原理到配置全解析

目录 一.通信领域基础知识介绍 1.1 串行和并行通信 1.2 同步和异步传输 1.3 串口和COM口 1.4 通信协议标准以及物理层定义 1.5 物理层协议之TTL / RS-232 / RS-485 二.USART介绍 2.1 USART特点介绍 2.2 UART和TTL / RS-232 / RS-485 2.3 USART硬线流控介绍 2.4 USAR…

MariaDB介绍和MariaDB包安装

文章目录MariaDB介绍和安装1.MariaDB介绍1.1 起源与背景1.2 核心特性1.2.1 高度兼容 MySQL1.2.2 优化的存储引擎1.2.3 企业级功能增强1.2.4 性能优化1.2.5 安全增强1.3 社区与生态1.4 应用场景1.5 总结2.MariaDB安装2.1 主机初始化2.1.1 设置网卡名2.1.2 设置ip地址2.1.3 配置镜…

双指针与滑动窗口算法精讲:从原理到高频面试题实战

引言&#xff1a;算法选择的十字路口 在算法面试中&#xff0c;双指针和滑动窗口如同两把瑞士军刀&#xff0c;能高效解决80%以上的数组和字符串问题。本文将深入解析这两种技术的核心差异&#xff0c;结合力扣高频题目&#xff0c;提供可直接复用的代码。 一、算法核心思想解析…

苹果MAC、MacBook air和pro安装windows双系统与iOS分发

文章目录1. main1.1 准备工作1.2 启动转换助理1.3 Windows安装1.4 苹果电脑安装Windows双系统切换2. 苹果(iOS)分发/上架2.1 上架App Store2.2 上架TestFlight2.3 webClip免签上架2.4 超级签名2.5 企业证书2.6 app分发系统Reference1. main 苹果电脑安装windows双系统 https:…

ArcGIS定向影像(1)——非传统影像轻量级解决方案

常常听到这样的需求&#xff0c;ArcGIS能让用户自己低成本的做出谷歌街景吗&#xff1f;现在 _ArcGIS Pro 3.2 和 ArcGIS Enterprise 11.2 _能够让用户不使用任何插件和扩展的情况下完成街景数据集的构建&#xff0c;数据管理&#xff0c;发布服务和调用的完整解决方案。非常体…

uni-app 网络之封装实战HTTP请求框架

前言在uniapp开发中&#xff0c;网络请求是每个应用都必不可少的功能模块。一个优秀的网络请求封装不仅能提高开发效率&#xff0c;还能增强代码的可维护性和可扩展性。本文将基于实际项目经验&#xff0c;详细介绍如何封装一个高效、可维护的Uniapp网络请求框架&#xff0c;并…

架构师成长之路-架构方法论

文章目录前言一、先搞懂&#xff1a;架构师不仅仅是“技术大佬”&#xff0c;更是“问题解决者”1.1 架构师的分类&#xff1a;不止“开发架构师”一种1.2 架构师要关注什么&#xff1f;别只盯着技术1.3 架构师解决问题的4步心法&#xff1a;从定义到落地1.4 架构师的成长攻略&…

uniapp在微信小程序中实现 SSE 流式响应

前言 最近需要使用uniapp开发一个智能对话页面&#xff0c;其中就需要使用SSE进行通信。 本文介绍下在uniapp中如何基于uni.request实现SSE流式处理。 在线体验 #小程序:yinuosnowball SSE传输格式 返回输出的流式块: Content-Type为text/event-stream 每个流式块均为 d…

STM32N6AI资料汇总

文章目录前言一、STM32N6硬件资源1.1 NUCLEO-N657X0-Q1.2 STM32N6570-DK1.3 正点原子STM32N647二、STM32N6软件资源2.1 STM32CubeN6例程资源包2.2 STM32图像信号处理器&#xff08;ISP&#xff09;调优软件2.3 正点原子N6开发板配套软件三、AI软件资源3.1 STM32N6 AI软件包总结…

Flask学习笔记(一)

1、环境准备pip install Flask使用Flask开发第1个入门程序&#xff1a;from flask import Flask app Flask(__name__) app.route(/) def hello_world():return Hello, World!if __name__ __main__:app.run()Flask构造函数将当前模块的名称(__name__)作为参数。2、route函数ap…

CSP认证练习题目推荐(4)

思维、贪心、综合 排队打水 这道题目不算难&#xff0c;但是不注意还是会出现很多错误&#xff0c;比如结构体的书写。以及自定义结构体排序。还有这里做的优化&#xff0c;使用前缀和记录打水的等待时间&#xff0c;但是这里很容易出错的点在于等待时间是应该是记录的前一个…

MySQL 视图的更新与删除:从操作规范到风险防控

MySQL 视图的更新与删除&#xff1a;从操作规范到风险防控 视图作为 “虚拟表”&#xff0c;其更新与删除操作常常让开发者困惑 ——“为什么更新视图会报错&#xff1f;”“删除视图会不会弄丢数据&#xff1f;” 实际上&#xff0c;80% 的视图操作问题都源于对 “视图依赖基表…

C 语言实现 I.MX6ULL 点灯(续上一篇)、SDK、deep及bsp工程管理

目录 一、汇编点灯转 C 语言实现 1. 关键字&#xff1a;volatile 2. 寄存器地址定义&#xff08;两种方式&#xff09; &#xff08;1&#xff09;直接宏定义地址 &#xff08;2&#xff09;结构体封装寄存器&#xff08;优化访问&#xff09; 3. 核心功能代码 &#xff…

DevOps实战(7) - 使用Arbess+GitPuk+sourcefare实现Node.js项目自动化部署

Arbess 是一款国产开源免费的 CI/CD 工具&#xff0c;工具支持一键部署&#xff0c;页面简洁易用。本文将详细介绍如何安装配置使用GitPuk、sourcefare、Arbess系统&#xff0c;使用流水线拉取GitPuk源码、使用sourcefare代码扫描、构建安装包并进行主机部署。 1、GitPuk 安装…

算法,蒜鸟蒜鸟-P1-理解“双指针”

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录引言1 双指针&#xff1a;Two Pointers1.1 左右指…

使用cookiecutter创建python项目

一、关于Python项目结构Python 项目并没有完全统一的 “固定结构”&#xff0c;但行业内有一些广泛遵循的约定俗成的目录结构&#xff08;尤其针对可分发的包或大型项目&#xff09;。同时&#xff0c;确实有工具可以快速生成这些标准化结构&#xff0c;提高开发效率&#xff0…

台积电生态工程深度解析:从晶圆厂到蜂巢的系统架构迁移

当半导体巨头将工厂视为生态系统&#xff0c;用工程思维解决环境问题概述&#xff1a;生态系统的工程化再造台积电近日开展的"积蜜"项目绝非简单的企业CSR行为&#xff0c;而是一场将生态系统视为复杂系统进行工程化改造的技术实践。本文将从系统架构、数据监控、循环…

从零实现一个简易计算器

最近在刷算法题时&#xff0c;遇到了实现计算器的问题。一开始觉得很简单&#xff0c;但真正动手实现时才发现其中有很多细节需要考虑。今天就来分享一下我的实现思路和学到的经验。问题分析我们需要实现一个能够处理加减乘除四则运算的计算器&#xff0c;要正确处理运算符的优…