力扣 Pandas 挑戰(6)---數據合并

本文圍繞力扣的Pandas簡單題集,解析如何用Pandas完成基礎數據處理任務,適合Pandas初學者學習。

題目1:1050. 合作過至少三次的演員和導演

題目描述:

ActorDirector 表:

+-------------+---------+
| Column Name | Type ? ?|
+-------------+---------+
| actor_id ? ?| int ? ? |
| director_id | int ? ? |
| timestamp ? | int ? ? |
+-------------+---------+
timestamp 是這張表的主鍵(具有唯一值的列).

編寫解決方案找出合作過至少三次的演員和導演的 id 對 (actor_id, director_id)

示例 1:

輸入:
ActorDirector 表:
+-------------+-------------+-------------+
| actor_id ? ?| director_id | timestamp ? |
+-------------+-------------+-------------+
| 1 ? ? ? ? ? | 1 ? ? ? ? ? | 0 ? ? ? ? ? |
| 1 ? ? ? ? ? | 1 ? ? ? ? ? | 1 ? ? ? ? ? |
| 1 ? ? ? ? ? | 1 ? ? ? ? ? | 2 ? ? ? ? ? |
| 1 ? ? ? ? ? | 2 ? ? ? ? ? | 3 ? ? ? ? ? |
| 1 ? ? ? ? ? | 2 ? ? ? ? ? | 4 ? ? ? ? ? |
| 2 ? ? ? ? ? | 1 ? ? ? ? ? | 5 ? ? ? ? ? |
| 2 ? ? ? ? ? | 1 ? ? ? ? ? | 6 ? ? ? ? ? |
+-------------+-------------+-------------+
輸出:
+-------------+-------------+
| actor_id ? ?| director_id |
+-------------+-------------+
| 1 ? ? ? ? ? | 1 ? ? ? ? ? |
+-------------+-------------+
解釋:
唯一的 id 對是 (1, 1),他們恰好合作了 3 次。

解題思路:

方法1:使用 value_counts() 直接統計每對的出現次數。

方法2:按actor_id和director_id分為兩組,使用size()計算每組行數,篩選出大于等于3的數據。

題目代碼:

方法1:

import pandas as pd
def actors_and_directors(actor_director: pd.DataFrame) -> pd.DataFrame:# 使用value_counts()直接統計counts = actor_director[['actor_id', 'director_id']].value_counts()# 篩選并重置索引result = counts[counts >= 3].reset_index()[['actor_id', 'director_id']]return result

方法2:

import pandas as pd
def actors_and_directors(actor_director: pd.DataFrame) -> pd.DataFrame:# 統計每對演員和導演的合作次數collaboration_counts = actor_director.groupby(['actor_id', 'director_id']).size().reset_index(name='count')# 篩選次數≥3的result = collaboration_counts[collaboration_counts['count'] >= 3]return result[['actor_id', 'director_id']]

題目2:1378. 使用唯一標識碼替換員工ID

題目描述:

Employees 表:

+---------------+---------+
| Column Name ? | Type ? ?|
+---------------+---------+
| id ? ? ? ? ? ?| int ? ? |
| name ? ? ? ? ?| varchar |
+---------------+---------+
在 SQL 中,id 是這張表的主鍵。
這張表的每一行分別代表了某公司其中一位員工的名字和 ID 。

EmployeeUNI 表:

+---------------+---------+
| Column Name ? | Type ? ?|
+---------------+---------+
| id ? ? ? ? ? ?| int ? ? |
| unique_id ? ? | int ? ? |
+---------------+---------+
在 SQL 中,(id, unique_id) 是這張表的主鍵。
這張表的每一行包含了該公司某位員工的 ID 和他的唯一標識碼(unique ID)。

展示每位用戶的 唯一標識碼(unique ID );如果某位員工沒有唯一標識碼,使用 null 填充即可。

你可以以 任意 順序返回結果表。

解題思路:

使用merge()方法根據id將數據合并,如果沒有對應的數據,則填充為NaN。

題目代碼:

import pandas as pddef replace_employee_id(employees: pd.DataFrame, employee_uni: pd.DataFrame) -> pd.DataFrame:#根據id將數據合并,無對應數據則填充為NaNemployee_name_uni = pd.merge(employees, employee_uni, on='id', how='left')return employee_name_uni[['unique_id', 'name']]

題目3:1280. 學生們參加各科測試的次數

題目描述:

學生表: Students

+---------------+---------+
| Column Name ? | Type ? ?|
+---------------+---------+
| student_id ? ?| int ? ? |
| student_name ?| varchar |
+---------------+---------+
在 SQL 中,主鍵為 student_id(學生ID)。
該表內的每一行都記錄有學校一名學生的信息。

科目表: Subjects

+--------------+---------+
| Column Name ?| Type ? ?|
+--------------+---------+
| subject_name | varchar |
+--------------+---------+
在 SQL 中,主鍵為 subject_name(科目名稱)。
每一行記錄學校的一門科目名稱。

考試表: Examinations

+--------------+---------+
| Column Name ?| Type ? ?|
+--------------+---------+
| student_id ? | int ? ? |
| subject_name | varchar |
+--------------+---------+
這個表可能包含重復數據(換句話說,在 SQL 中,這個表沒有主鍵)。
學生表里的一個學生修讀科目表里的每一門科目。
這張考試表的每一行記錄就表示學生表里的某個學生參加了一次科目表里某門科目的測試。

查詢出每個學生參加每一門科目測試的次數,結果按 student_id 和 subject_name 排序。

解題思路:

該題目包含多種對dataframe數據的操作,分解為多個問題來解答。

首先按id和科目分組,并計算考試次數,合并dataframe數據,填充缺失值,最后按照升序排序。

題目代碼:

import pandas as pddef students_and_examinations(students: pd.DataFrame, subjects: pd.DataFrame,examinations: pd.DataFrame) -> pd.DataFrame:#按id和科目分組,并計算考試次數。grouped = examinations.groupby(['student_id', 'subject_name']).size().reset_index(name='attended_exams')# 獲取id和subject的所有組合all_id_subjects = pd.merge(students, subjects, how='cross')# 左連接id_subjects_count = pd.merge(all_id_subjects, grouped, on=['student_id', 'subject_name'], how='left')#缺失值填充id_subjects_count['attended_exams'] = id_subjects_count['attended_exams'].fillna(0).astype(int)#升序排序id_subjects_count.sort_values(['student_id', 'subject_name'], inplace=True)return id_subjects_count[['student_id', 'student_name', 'subject_name', 'attended_exams']]

題目4:570. 至少有5名直接下屬的經理

題目描述:

表: Employee

+-------------+---------+
| Column Name | Type ? ?|
+-------------+---------+
| id ? ? ? ? ?| int ? ? |
| name ? ? ? ?| varchar |
| department ?| varchar |
| managerId ? | int ? ? |
+-------------+---------+
id 是此表的主鍵(具有唯一值的列)。
該表的每一行表示雇員的名字、他們的部門和他們的經理的id。
如果managerId為空,則該員工沒有經理。
沒有員工會成為自己的管理者。

編寫一個解決方案,找出至少有五個直接下屬的經理。

以 任意順序 返回結果表。

解題思路:

使用groupby()方法按managerid分組,計算每組id數量,即經理的下屬數量,然后篩選出數量大于等于5個的數據id,再找到數據id對應的name數據。

題目代碼:

import pandas as pd
def find_managers(employee: pd.DataFrame) -> pd.DataFrame:#按managerId分組,計算每組id數量,即下屬數量subordinate_count = employee.groupby('managerId')['id'].count()#篩選出下屬數量大于等于5的數據managers_with_5_subordinates = subordinate_count[subordinate_count >= 5].index#找出篩選出的id所對應的姓名name數據result = employee[employee['id'].isin(managers_with_5_subordinates)]['name']return result.to_frame(name='name')

題目5:607. 銷售員

題目描述:

表: SalesPerson

+-----------------+---------+
| Column Name ? ? | Type ? ?|
+-----------------+---------+
| sales_id ? ? ? ?| int ? ? |
| name ? ? ? ? ? ?| varchar |
| salary ? ? ? ? ?| int ? ? |
| commission_rate | int ? ? |
| hire_date ? ? ? | date ? ?|
+-----------------+---------+
sales_id 是該表的主鍵列(具有唯一值的列)。
該表的每一行都顯示了銷售人員的姓名和 ID ,以及他們的工資、傭金率和雇傭日期。

表: Company

+-------------+---------+
| Column Name | Type ? ?|
+-------------+---------+
| com_id ? ? ?| int ? ? |
| name ? ? ? ?| varchar |
| city ? ? ? ?| varchar |
+-------------+---------+
com_id 是該表的主鍵列(具有唯一值的列)。
該表的每一行都表示公司的名稱和 ID ,以及公司所在的城市。

表: Orders

+-------------+------+
| Column Name | Type |
+-------------+------+
| order_id ? ?| int ?|
| order_date ?| date |
| com_id ? ? ?| int ?|
| sales_id ? ?| int ?|
| amount ? ? ?| int ?|
+-------------+------+
order_id 是該表的主鍵列(具有唯一值的列)。
com_id 是 Company 表中 com_id 的外鍵(reference 列)。
sales_id 是來自銷售員表 sales_id 的外鍵(reference 列)。
該表的每一行包含一個訂單的信息。這包括公司的 ID 、銷售人員的 ID 、訂單日期和支付的金額。

編寫解決方案,找出沒有任何與名為 “RED” 的公司相關的訂單的所有銷售人員的姓名。

以 任意順序 返回結果表。

解題思路:

找到與red有關的訂單,根據訂單找相關的銷售人員,找出不在這些銷售人員名單中的其他銷售人員。

題目代碼:

import pandas as pddef sales_person(sales_person: pd.DataFrame, company: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:#篩選與red有關的訂單red_company = company[company['name'] == 'RED']if red_company.empty:return sales_person[['name']]red_orders = orders[orders['com_id'] == red_company['com_id'].iloc[0]]# 找出這些訂單對應的銷售人員IDred_sales_ids = red_orders['sales_id'].unique()# 找出不在這些銷售人員名單中的所有銷售人員non_red_sales = sales_person[~sales_person['sales_id'].isin(red_sales_ids)]return non_red_sales[['name']]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91407.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91407.shtml

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

相關文章

隨筆之TDengine基準測試示例

文章目錄一、基本信息二、基準測試策略三、基準測試過程1. 模擬高并發寫入場景2. 模擬并發查詢場景四、基準測試結論一、基本信息 TDengine 版本:3.3.6.13(目前最新版本)服務器配置:16核CPU,32GB內存,高IO…

【IQA技術專題】DISTS代碼講解

本文是對DISTS圖像質量評價指標的代碼解讀,原文解讀請看DISTS文章講解。 本文的代碼來源于IQA-Pytorch工程。 1、原文概要 以前的一些IQA方法對于捕捉紋理上的感知一致性有所欠缺,魯棒性不足。基于此,作者開發了一個能夠在圖像結構和圖像紋…

2024年SEVC SCI2區,一致性虛擬領航者跟蹤群集算法GDRRT*-PSO+多無人機路徑規劃,深度解析+性能實測

目錄1.摘要2.算法背景3.GDRRT*-PSO與虛擬領航者跟蹤算法4.結果展示5.參考文獻6.算法輔導應用定制讀者交流1.摘要 隨著無人機技術的快速發展及其卓越的運動和機動性能,無人機在社會和軍事等諸多領域得到了廣泛應用。多無人機協同作業,能夠顯著提升任務執…

鏈特異性文庫是什么?為什么它在轉錄組測序中越來越重要?

鏈特異性文庫是什么?為什么它在轉錄組測序中越來越重要? 在現代分子生物學研究中,RNA測序(RNA-seq) 是一種廣泛應用的技術,用于分析基因在不同條件下的表達情況。而在RNA-seq的眾多技術細節中,有…

ClickHouse vs PostgreSQL:數據分析領域的王者之爭,誰更勝一籌?

文章概要 作為一名數據架構師,我經常被問到一個問題:在眾多數據庫選擇中,ClickHouse和PostgreSQL哪一個更適合我的項目?本文將深入探討這兩種數據庫系統的核心差異、性能對比、適用場景以及各自的優缺點,幫助您在技術選…

面向對象系統的單元測試層次

面向對象系統的單元測試層次面向對象(Object-Oriented, OO)編程范式引入了封裝、繼承和多態等核心概念,這使得傳統的、基于函數的單元測試方法不再充分。面向對象系統的單元測試必須適應其獨特的結構和行為特性,從單一方法擴展到類…

如何用USRP捕獲手機信號波形(上)系統及知識準備

目錄: 如何用USRP捕獲手機信號波形(上)系統及知識準備 如何用USRP捕獲手機信號波形(中)手機/基站通信 如何用USRP捕獲手機信號波形(下)協議分析 一、手機通信參數獲取 首先用Cellular-z網絡…

C語言-數組:數組(定義、初始化、元素的訪問、遍歷)內存和內存地址、數組的查找算法和排序算法;

本章概述思維導圖:C語言數組在C語言中,數組是一種固定大小的、相同類型元素的有序集合,通過索引(下標)訪問。數組數組:是一種容器,可以用來存儲同種數據類型的多個值;數組特點&#…

河南萌新聯賽2025第(二)場:河南農業大學(補題)

文章目錄前言A.約數個數和整除分塊(相當于約數求和)相關例題:取模B.異或期望的秘密二進制的規律相關例題累加器小藍的二進制詢問乘法逆元1. 概念2.基本定義3.費馬小定理1.定理內容2.重要推論D.開羅爾網絡的備用連接方案E.咕咕嘎嘎!!!(easy)I.猜數游戲(easy)K.打瓦M.…

常見中間件漏洞

一、TomcatTomcat put方法任意文件寫入漏洞環境搭建,啟動時端口被占用就改yml配置文件,改成8081端口。(我這里是8080)cd vulhub-master/tomcat/CVE-2017-12615 docker-compose up -d 去抓包,改成put提交。下面的內容是用哥斯拉生成的木馬文件…

27.(vue3.x+vite)以pinia為中心的開發模板(監聽watch)

效果截圖 代碼實現: HelloWorld.vue <template><div style="padding: 20px">介紹:<br />1:使用統一的 watch 來監聽store的值。<br

Jenkins 詳解

Jenkins 是一個開源的持續集成和持續交付(CI/CD)工具&#xff0c;用于自動化軟件開發過程中的構建、測試和部署階段。以下是關于 Jenkins 的詳細介紹&#xff1a; 1. Jenkins 核心概念 1.1 持續集成(CI) 開發人員頻繁地將代碼變更提交到共享倉庫每次提交都會觸發自動構建和測試…

動態配置實現過程

查看DCCValueBeanFactory類的完整實現&#xff0c;了解動態配置的實現過程 動態配置實現過程 1. 自定義注解 使用DCCValue注解標記需要動態配置的字段&#xff0c;格式為key:defaultValue&#xff1a; DCCValue("downgradeSwitch:0") private String downgradeSw…

【大模型理論篇】跨語言AdaCOT

參考&#xff1a;AdaCoT: Rethinking Cross-Lingual Factual Reasoning throughAdaptive Chain-of-ThoughtAdaCoT&#xff08;Adaptive Chain-of-Thought&#xff0c;自適應思維鏈&#xff09;是一項提升大型語言模型&#xff08;LLMs&#xff09;跨語言事實推理能力的新框架。…

vue3項目搭建

前一段時間招聘前端開發,發現好多開發連基本的創建項目都不會,這里總結一下 在Vue 3中,使用Webpack和Vite創建的項目文件結構及語言(JS/TS)的選擇有以下主要區別: 1. 創建方式與文件結構差異 方式一、Webpack(Vue CLI) 創建命令: vue create project-name 典型文件結構…

企業簽名的多種形式

企業簽名有多種形式&#xff0c;可分為企業簽名獨立版、企業簽名穩定版、企業簽名共享版等。每一種形式的企業簽名都有其獨特的特點&#xff0c;其中&#xff1a;  企業簽名獨立版&#xff1a;其特性主要為穩定性較高&#xff0c;使用者可以通過控制APP的下載量來保證APP的穩…

解構遠程智能系統的視頻能力鏈:從RTSP|RTMP協議接入到Unity3D頭顯呈現全流程指南

在人工智能奔騰的2025年&#xff0c;WAIC&#xff08;世界人工智能大會&#xff09;釋放出一個明確信號&#xff1a;視頻能力已經成為通往“遠程智能”的神經中樞。在無人機、四足機器人、遠程施工、巡檢等新興場景中&#xff0c;一套可靠、低延遲、可嵌入頭顯設備的視頻傳輸系…

Less Less基礎

1.lessless是一種動態樣式語言&#xff0c;屬于CSS預處理器的范疇&#xff0c;它擴展了CSS語言&#xff0c;增加了變量&#xff0c;Mixin&#xff0c;函數等特性&#xff0c;使CSS更易維護和擴展。Less既可以在客戶端上運行&#xff0c;也可以借助Node.js在服務端運行。2.Less中…

如何使用 Redis 實現 API 網關或單個服務的請求限流?

使用 Redis 高效實現 API 網關與服務的請求限流 在微服務架構中&#xff0c;對 API 網關或單個服務的請求進行速率限制至關重要&#xff0c;以防止惡意攻擊、資源濫用并確保系統的穩定性和可用性。 Redis 憑借其高性能、原子操作和豐富的數據結構&#xff0c;成為實現請求限流的…

圖片查重從設計到實現(7) :使用 Milvus 實現高效圖片查重功能

使用 Milvus 實現高效圖片查重功能本文將介紹如何利用 Milvus 向量數據庫構建一個高效的圖片查重系統&#xff0c;通過傳入圖片就能快速從已有數據中找出匹配度高的相似圖片。一.什么是圖片查重&#xff1f; 圖片查重指的是通過算法識別出內容相同或高度相似的圖片&#xff0c;…