Leetcode 解鎖 : Primary Department for Each Employee

更新 發佈閱讀 9 分鐘
vocus|新世代的創作平台
題目概述

問題連結

這題想解的是:當我們手上有一份員工部門資料表,要怎麼找出「每位員工的主要部門」?

資料中,員工可能同時隸屬於多個部門,但只有一個主要部門(標記為 primary_flag = 'Y')。如果員工只屬於一個部門,那麼這個部門就自動成為主要部門,不論 primary_flag 的值是什麼。

這就像是在處理公司內部的人事資料時,需要確定每位員工的主要歸屬部門,以便進行績效評估、資源分配等管理工作。


Input 格式

表格名稱為 Employee,包含以下欄位:

  • employee_id - 員工ID
  • department_id - 部門ID
  • primary_flag - 是否為主要部門('Y' 或 'N')
vocus|新世代的創作平台

每位員工可能有多筆記錄(代表隸屬多個部門),但最多只有一個部門會被標記為主要部門(primary_flag = 'Y')。

Output 格式

返回每位員工的主要部門,包含兩個欄位:

  • employee_id - 員工ID
  • department_id - 主要部門ID
vocus|新世代的創作平台


Pandas 解法 1
排序後取第一筆

Step 1: 排序資料,讓 primary_flag='Y' 的記錄排在前面

Step 2: 對每個 employee_id 只保留第一筆記錄

Step 3: 只返回需要的欄位


def find_primary_department(employee: pd.DataFrame) -> pd.DataFrame:

df_sorted = employee.sort_values(
by=['employee_id', 'primary_flag'],
ascending=[True, False]
)

result = df_sorted.drop_duplicates(
subset='employee_id',
keep='first'
)

return result[['employee_id', 'department_id']]


這個方法先將資料依照 employee_idprimary_flag 排序,確保主要部門('Y')排在前面,然後用 drop_duplicates 只保留每位員工的第一筆記錄。

vocus|新世代的創作平台



Pandas 解法 2
計數 + 條件篩選

Step 1: 計算每位員工的部門數量

Step 2: 篩選條件:只有一個部門 或 標記為主要部門

Step 3: 應用篩選條件並只返回需要的欄位

def find_primary_department(employee: pd.DataFrame) -> pd.DataFrame:

employee['dept_count'] = employee.groupby('employee_id')['department_id'].transform('count')
filt = (employee['dept_count'] == 1) | (employee['primary_flag'] == 'Y')
result = employee.loc[filt, ['employee_id', 'department_id']]

return result

這個方法先計算每位員工有幾個部門,然後篩選出「只有一個部門」或「標記為主要部門」的記錄。

vocus|新世代的創作平台


Pandas 解法 3
巧用 duplicated 函數

Step 1: 沒有重複的員工ID 或 標記為主要部門

Step 2: 應用篩選條件並只返回需要的欄位

def find_primary_department(employee: pd.DataFrame) -> pd.DataFrame:

filt = (~employee.duplicated(subset='employee_id', keep=False)) | (employee['primary_flag'] == 'Y')

result = employee.loc[filt, ['employee_id', 'department_id']]

return result
vocus|新世代的創作平台
Pandas 解法 4
分開處理後合併

Step 1: 找出所有標記為主要部門的記錄

Step 2: 找出只有一個部門的員工記錄(不在主要部門列表中的員工)

Step 3: 合併兩部分結果

Step 4: 只返回需要的欄位

def find_primary_department(employee: pd.DataFrame) -> pd.DataFrame:

primary_depts = employee.loc[employee['primary_flag'] == 'Y', :].copy()
single_dept_employees = employee[~employee['employee_id'].isin(primary_depts['employee_id'])]
result = pd.concat([primary_depts, single_dept_employees], ignore_index=True)

return result[['employee_id', 'department_id']]
vocus|新世代的創作平台


Pandas 解法 5
使用 assign + query 的函數式寫法

使用 assign 生成新欄位,並用 query 篩選

def find_primary_department(employee: pd.DataFrame) -> pd.DataFrame:

result = employee.assign(
max_flag = lambda df: df.groupby('employee_id')['primary_flag']
.transform('max')
) .query('primary_flag == max_flag') [['employee_id', 'department_id']]

return result
vocus|新世代的創作平台


Pandas 解法 6
使用 merge 合併計數結果

Step 1: 計算每位員工的部門數量

Step 2: 合併計數結果與原始資料

Step 3: 將只有一個部門的員工的 primary_flag 設為 'Y'

Step 4: 篩選出標記為主要部門的記錄

def find_primary_department(employee: pd.DataFrame) -> pd.DataFrame:
#
dept_counts = employee.groupby('employee_id').count()[['department_id']].reset_index()
dept_counts = dept_counts.rename(columns={'department_id': 'dept_count'})
merged_data = pd.merge(dept_counts, employee, on='employee_id', how='inner')
merged_data.loc[merged_data['dept_count'] == 1, 'primary_flag'] = 'Y'
result = merged_data[merged_data['primary_flag'] == 'Y'][['employee_id', 'department_id']]

return result
vocus|新世代的創作平台


謝謝您花時間將此篇文章讀完,若覺得對您有幫助可以幫忙按個讚、分享來或是珍藏喔!也歡迎Follow我的Threads/ FB,持續追蹤生產力工具、商業分析、商業英文的實用範例,提升自己的職場力喔!






留言
avatar-img
DigNo Ape 數遊原人
60會員
138內容數
我們秉持著從原人進化的精神,不斷追求智慧的累積和工具的運用來提升生產力。我們相信,每一個成員都擁有無限的潛力,透過學習和實踐,不斷成長和進步。
DigNo Ape 數遊原人的其他內容
2025/05/03
題目概述 問題連結 這題想解的是:當我們手上有一份玩家遊戲活動記錄,要計算「首次登入後隔天也有登入的玩家比例」是多少? 資料是玩家每天登入的記錄,我們需要找出每個玩家的首次登入日期,然後判斷他們是否在隔天也有登入。最後計算這類「忠實玩家」佔全部玩家的比例,並四捨五入至小數點後兩位。
Thumbnail
2025/05/03
題目概述 問題連結 這題想解的是:當我們手上有一份玩家遊戲活動記錄,要計算「首次登入後隔天也有登入的玩家比例」是多少? 資料是玩家每天登入的記錄,我們需要找出每個玩家的首次登入日期,然後判斷他們是否在隔天也有登入。最後計算這類「忠實玩家」佔全部玩家的比例,並四捨五入至小數點後兩位。
Thumbnail
2025/04/17
題目概述 LeetCode 第 1174 題「Immediate Food Delivery II」的目標是計算所有顧客的第一筆訂單中,即時配送(即訂單日期與顧客偏好配送日期相同)的比例,並將結果四捨五入至小數點後兩位。 [問題連結]
Thumbnail
2025/04/17
題目概述 LeetCode 第 1174 題「Immediate Food Delivery II」的目標是計算所有顧客的第一筆訂單中,即時配送(即訂單日期與顧客偏好配送日期相同)的比例,並將結果四捨五入至小數點後兩位。 [問題連結]
Thumbnail
2025/04/03
題目概述 這題想解的是:當我們手上有一份記錄了機器上 process 的開始與結束時間的表格,要怎麼計算「每台機器平均每個 process 花了多少秒」?
Thumbnail
2025/04/03
題目概述 這題想解的是:當我們手上有一份記錄了機器上 process 的開始與結束時間的表格,要怎麼計算「每台機器平均每個 process 花了多少秒」?
Thumbnail
看更多
你可能也想看
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
不要躊躇遲疑,不要搖擺不定。讓自己成為一個意志堅定處事果斷,具備令部屬信服權威的領導者吧!
Thumbnail
不要躊躇遲疑,不要搖擺不定。讓自己成為一個意志堅定處事果斷,具備令部屬信服權威的領導者吧!
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
「人力盤點」在組織管理中常被提起,本文會說明「人力盤點」的定義、本質與方法,希望透過了解本質再來使用這項管理手法,才能發揮其效用。
Thumbnail
「人力盤點」在組織管理中常被提起,本文會說明「人力盤點」的定義、本質與方法,希望透過了解本質再來使用這項管理手法,才能發揮其效用。
Thumbnail
你接到一個很重要的專案,其中蘊含了許多非你專業可評估的需求。因此,你要從兩位同事中挑一位副手加入專案團隊。你會怎麼做?
Thumbnail
你接到一個很重要的專案,其中蘊含了許多非你專業可評估的需求。因此,你要從兩位同事中挑一位副手加入專案團隊。你會怎麼做?
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
王吉達吉言吉語: 隨著在組織裡工作的時間越長,參與跨部門協作的機會就越高,甚至有機會被要求籌組一個跨部門的小組。 在《橫向管理高爾夫》(製造業版本)的步驟 1.1就有這麼一個狀況: 你是某部門經理,上司李大為總經理指派你負責籌組一個跨部門的專案小組,
Thumbnail
王吉達吉言吉語: 隨著在組織裡工作的時間越長,參與跨部門協作的機會就越高,甚至有機會被要求籌組一個跨部門的小組。 在《橫向管理高爾夫》(製造業版本)的步驟 1.1就有這麼一個狀況: 你是某部門經理,上司李大為總經理指派你負責籌組一個跨部門的專案小組,
Thumbnail
為活動安排適合的工作分組,不僅可以幫助活動流暢,往更遠一點看,能幫助大家提升其專業分工上能力,例如一開始只能當一位接待員,但經驗累積後,主管就可以放手給其承擔各大領導角色。這樣的思維可能顛覆傳統職場上對下關係,但對一個組織長遠發展跟經驗傳承是好的。本文以一場200人研討會規格,試著列出所需人力分組。
Thumbnail
為活動安排適合的工作分組,不僅可以幫助活動流暢,往更遠一點看,能幫助大家提升其專業分工上能力,例如一開始只能當一位接待員,但經驗累積後,主管就可以放手給其承擔各大領導角色。這樣的思維可能顛覆傳統職場上對下關係,但對一個組織長遠發展跟經驗傳承是好的。本文以一場200人研討會規格,試著列出所需人力分組。
Thumbnail
題目敘述 Most Profit Assigning Work 公司裡有n位員工,m件任務。 每位員工的能力記錄在worker陣列。 每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。 不同的員工可以做同樣的任務。 請問怎麼分配任務可以得到整體最大獲利?
Thumbnail
題目敘述 Most Profit Assigning Work 公司裡有n位員工,m件任務。 每位員工的能力記錄在worker陣列。 每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。 不同的員工可以做同樣的任務。 請問怎麼分配任務可以得到整體最大獲利?
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
在上週的行前有8個簡單的腦力激盪題目,那這8個題目大叔我會分成兩個章節來說明,今天先上第一課的文章內容,星期五會上Podcast,有興趣的格友們務必追蹤唷😎 1.工廠是什麼?  首先,我們必須了解工廠的含義。一個健全的工廠由多個部門組成,包括生產部門、品質部門、製程部門、資材部門、設備部門
Thumbnail
在上週的行前有8個簡單的腦力激盪題目,那這8個題目大叔我會分成兩個章節來說明,今天先上第一課的文章內容,星期五會上Podcast,有興趣的格友們務必追蹤唷😎 1.工廠是什麼?  首先,我們必須了解工廠的含義。一個健全的工廠由多個部門組成,包括生產部門、品質部門、製程部門、資材部門、設備部門
Thumbnail
曾有遇到某公司資深人資說,要能入職他們公司行政職位的基礎是excel會樞紐分析,而且面試時會直接拿電腦給求職者操作! 行政工作很常需要各種數據 ,在會議上回覆老闆的快問快答。 我在學樞紐分析時,最大的卡關在,不知道哪個要放在「欄」,哪個放在「列」!這時候,最會excel的ChatGPT就派上用場囉!
Thumbnail
曾有遇到某公司資深人資說,要能入職他們公司行政職位的基礎是excel會樞紐分析,而且面試時會直接拿電腦給求職者操作! 行政工作很常需要各種數據 ,在會議上回覆老闆的快問快答。 我在學樞紐分析時,最大的卡關在,不知道哪個要放在「欄」,哪個放在「列」!這時候,最會excel的ChatGPT就派上用場囉!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News