數據分析:合并

🔷 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/web/96449.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96449.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96449.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高并發內存池(一):項目介紹和ThreadCache(線程緩存)實現

前言&#xff1a;本文將要介紹的高并發內存池&#xff0c;它的原型是Google的?個開源項?tcmalloc&#xff0c;全稱Thread-Caching Malloc&#xff0c;近一個月我將以學習為目的來模擬實現一個精簡版的高并發內存池&#xff0c;并對核心技術分塊進行精細剖析&#xff0c;分享在…

RK3399平臺ffmpeg-VPU硬編碼錄制USB攝像頭視頻、H264或MJPEG編碼

文章目錄 1 前言2 項目內容詳細說明2.0 功能2.1 工程文件夾說明 3 代碼3.1 CameraThread類3.1 CameraThreadImpl類 4 資源下載 1 前言 在某項目中需要在RK3399平臺實現USB攝像頭畫面的實時預覽、視頻錄制、拍照存儲等功能。 ??先來看需要實現的最終效果。 ?? ffmpeg USB攝…

解決藍牙耳機連win11電腦畫質依托答辯問題

以wh910n藍牙耳機為例 設置-系統-聲音-輸出&#xff08;耳機&#xff09;-常規&#xff08;輸出點不允許&#xff09;然后刪除wh910n藍牙設備 重新配對藍牙耳機

獨立顯卡和集成顯卡切換電腦卡住了怎么辦?

你是不是也遇到過這種情況——正忙著切換顯卡呢&#xff0c;電腦突然就卡住了&#xff0c;鼠標不動、屏幕定格&#xff0c;怎么按都沒反應&#xff1f;其實這種問題挺常見的&#xff0c;尤其是用了雙顯卡的筆記本或者工作站。別急著強制關機&#xff0c;嗯&#xff0c;咱們一步…

Java根據模版導出PDF文件

問題 工作中經常有這樣的需求&#xff0c;將一些數據&#xff0c;導出為下圖的PDF文件&#xff0c;那Java怎么做呢&#xff1f;今天手把手教你 準備模版 模版地址&#xff1a;https://download.csdn.net/download/ZHUSHANGLIN/91923381 修改模版使用AcrobatProPortable工具…

力扣hot100:環形鏈表(快慢指針法)(141)

一、題目描述二、思路分析這是鏈表題目中的經典問題&#xff0c;核心就是 如何判斷鏈表是否有環。 常見的兩種方法有&#xff1a;哈希表法&#xff1a;用一個集合存儲訪問過的節點&#xff0c;如果再次遇到相同節點說明有環。缺點&#xff1a;需要額外的空間&#xff0c;空間復…

AI 智能編碼工具:重塑開發效率的革命,從 GitHub Copilot 到國產新秀的全面解析

目錄 引言 一、主流智能編碼工具深度測評&#xff1a;從功能到實戰 1. GitHub Copilot&#xff1a;AI 編碼的 “開山鼻祖” 核心特性與實戰代碼 優缺點總結 2. Baidu Comate&#xff1a;文心大模型加持的 “國產之光” 核心特性與實戰代碼 優缺點總結 3. 通義靈碼&…

Server 13 ,CentOS 上使用 Nginx 部署多個前端項目完整指南( 支持多端口與腳本自動化 )

目錄 前言 一、實際背景 1.1 并行部署 1.2 接口代理 1.3 刷新問題 二、安裝腳本 2.1 創建腳本 2.2 不同系統 2.3 執行完成 三、配置文件 3.1 配置文件 3.2 目錄結構 3.3 重新啟動 四、驗證訪問 五、問題排查 5.1 訪問 404 5.2 接口 502 六、本文總結 6.1 清理…

2025最新:徹底解決Docker拉取鏡像超時問題

文章目錄&#x1f433; 解決 Docker 拉取鏡像超時&#xff1a;context deadline exceeded 完整指南&#xff08;2025 親測有效&#xff09;&#x1f525; 問題描述&#x1f9e9; 根本原因分析? 解決方案匯總? 方案 1&#xff1a;配置多源鏡像加速器&#xff08;推薦&#xff…

小鵬汽車 vla 算法最新進展和模型結構細節

小鵬汽車在 VLA&#xff08;視覺 - 語言 - 動作&#xff09;算法領域的最新進展和模型結構細節&#xff0c;體現了其在端到端智駕系統和車端大模型部署上的技術突破。以下是基于 2025 年 9 月最新公開信息的深度解析&#xff1a; 一、最新進展&#xff1a;全場景 VLA 系統量產落…

斐波那契數列推廣

目錄 問題&#xff1a; 法一&#xff1a; 法二&#xff1a; 例題: 問題&#xff1a; 已知斐波那契數列的第一個和最后一個數字&#xff0c;如何求整個數列&#xff08;即第二個數字&#xff09; 法一&#xff1a; 主要是將數列拆分成兩個數列的思想 法二&#xff1a; 暴力…

基于STM32設計的智慧路燈(華為云IOT)_281

文章目錄 一、前言 1.1 項目介紹 【1】項目開發背景 【2】設計實現的功能 【3】項目硬件模塊組成 【4】設計意義 【5】國內外研究現狀 【6】摘要 1.2 設計思路 1.3 系統功能總結 1.4 開發工具的選擇 【1】設備端開發 【2】上位機開發 1.5 參考文獻 1.6 系統框架圖 1.7 系統原理…

實驗十 合理定義分布列實現性能優化-分布式表關聯

實驗介紹本實驗通過分析普通查詢過程中存在的性能瓶頸點&#xff0c;通過執行計劃的分析找到可能的性能優化點并加以實施&#xff0c;最終達到優化的效果&#xff0c;重點關注分布式關聯相關查詢語句的優化。實驗目的了解通過合理定義分布列實現分布式關聯的性能優化。實驗步驟…

C#,RabbitMQ從入門到精通,.NET8.0(路由/分布式/主題/消費重復問題 /延遲隊列和死信隊列/消息持久化 )/RabbitMQ集群模式

為什么使用消息隊列 消息隊列&#xff08;MQ&#xff09;在分布式系統中用于解耦生產者和消費者&#xff0c;提高系統的異步處理能力、削峰填谷、增強可擴展性和可靠性。通過消息隊列&#xff0c;任務可以異步執行&#xff0c;避免系統因瞬時高并發而崩潰。 消息隊列場景 異…

OpenHarmony之SELinux安全組件底層原理設計架構精講

1. 組件介紹 1.1 核心功能 **SELinux(安全增強式Linux)**是Linux歷史上杰出的安全組件,包含一組內核修改和用戶空間工具,并提供了基于安全策略的強制訪問控制機制(Mandatory Access Control,MAC)。本部件負責對文件、屬性、服務等系統資源提供強制訪問控制保護,提供n…

IIS 部署 asp.net core 項目時,出現500.19、500.31問題的解決方案

目錄 &#xff08;一&#xff09;500.19 問題 1. 問題說明 2. 原因 3. 解決 &#xff08;二&#xff09;500.31 問題 1. 問題說明 2. 原因 打開事件檢視器的3種方式&#xff1a; 3. 解決 &#xff08;一&#xff09;500.19 問題 1. 問題說明 2. 原因 Web項目發布時&am…

中大型水閘安全監測的重要性及實施方法

水閘作為水利工程體系中的關鍵性構筑物&#xff0c;其結構安全性和運行可靠性直接影響到整個水利系統的穩定運行&#xff0c;更與下游地區人民群眾的生命財產安全息息相關。作為水利樞紐工程的重要控制節點&#xff0c;水閘承擔著防洪排澇、灌溉供水、航運發電等多重功能&#…

【芯片設計-信號完整性 SI 學習 1.1.1 -- Unit Interval,比特周期】

文章目錄1. Unit Interval (UI) / 比特周期 的定義2. 舉例說明3. 在眼圖 (Eye Diagram) 中的體現4. 示意圖(a) 單比特周期(b) 不同速率下的 UI(c) 眼圖中的 UI5. 總結1. Unit Interval (UI) / 比特周期 的定義 在高速信號傳輸與 信號完整性 (SI) 測試中&#xff0c;Unit Inter…

Go語言開發工具全解析

Go 語言的開發工具生態對于提高開發效率、保證代碼質量和團隊協作至關重要。一套完善的工具鏈可以幫助開發者&#xff1a;1. 加速編碼過程代碼模板快速生成常見模式例如使用代碼片段(Snippet)快速生成HTTP服務框架自動生成測試用例模板實時語法檢查減少錯誤即時顯示類型不匹配錯…

[郵件服務器core] 安全通信(SSL/TLS) | OpenSSL庫管理 | 服務端安全SECURITY.md

第5章&#xff1a;安全通信&#xff08;SSL/TLS&#xff09; 歡迎回來 在第4章&#xff1a;服務運行中&#xff0c;我們學習了如何啟動Dovecot郵件服務器并使其運行。 現在&#xff0c;我們的服務器已經啟動并準備好處理電子郵件&#xff0c;但有一個關鍵問題&#xff1a;我…