Leetcode 解鎖 : Primary Department for Each Employee

更新於 發佈於 閱讀時間約 9 分鐘
raw-image
題目概述

問題連結

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

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

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


Input 格式

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

  • employee_id - 員工ID
  • department_id - 部門ID
  • primary_flag - 是否為主要部門('Y' 或 'N')
raw-image

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

Output 格式

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

  • employee_id - 員工ID
  • department_id - 主要部門ID
raw-image


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 只保留每位員工的第一筆記錄。

raw-image



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

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

raw-image


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
raw-image
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']]
raw-image


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
raw-image


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
raw-image


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






留言
avatar-img
留言分享你的想法!
avatar-img
DigNo Ape 數遊原人
51會員
133內容數
我們秉持著從原人進化的精神,不斷追求智慧的累積和工具的運用來提升生產力。我們相信,每一個成員都擁有無限的潛力,透過學習和實踐,不斷成長和進步。
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
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
在上週的行前有8個簡單的腦力激盪題目,那這8個題目大叔我會分成兩個章節來說明,今天先上第一課的文章內容,星期五會上Podcast,有興趣的格友們務必追蹤唷😎 1.工廠是什麼?  首先,我們必須了解工廠的含義。一個健全的工廠由多個部門組成,包括生產部門、品質部門、製程部門、資材部門、設備部門
Thumbnail
在上週的行前有8個簡單的腦力激盪題目,那這8個題目大叔我會分成兩個章節來說明,今天先上第一課的文章內容,星期五會上Podcast,有興趣的格友們務必追蹤唷😎 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
王吉達吉言吉語: 隨著在組織裡工作的時間越長,參與跨部門協作的機會就越高,甚至有機會被要求籌組一個跨部門的小組。 在《橫向管理高爾夫》(製造業版本)的步驟 1.1就有這麼一個狀況: 你是某部門經理,上司李大為總經理指派你負責籌組一個跨部門的專案小組,
Thumbnail
王吉達吉言吉語: 隨著在組織裡工作的時間越長,參與跨部門協作的機會就越高,甚至有機會被要求籌組一個跨部門的小組。 在《橫向管理高爾夫》(製造業版本)的步驟 1.1就有這麼一個狀況: 你是某部門經理,上司李大為總經理指派你負責籌組一個跨部門的專案小組,
Thumbnail
曾有遇到某公司資深人資說,要能入職他們公司行政職位的基礎是excel會樞紐分析,而且面試時會直接拿電腦給求職者操作! 行政工作很常需要各種數據 ,在會議上回覆老闆的快問快答。 我在學樞紐分析時,最大的卡關在,不知道哪個要放在「欄」,哪個放在「列」!這時候,最會excel的ChatGPT就派上用場囉!
Thumbnail
曾有遇到某公司資深人資說,要能入職他們公司行政職位的基礎是excel會樞紐分析,而且面試時會直接拿電腦給求職者操作! 行政工作很常需要各種數據 ,在會議上回覆老闆的快問快答。 我在學樞紐分析時,最大的卡關在,不知道哪個要放在「欄」,哪個放在「列」!這時候,最會excel的ChatGPT就派上用場囉!
Thumbnail
不要躊躇遲疑,不要搖擺不定。讓自己成為一個意志堅定處事果斷,具備令部屬信服權威的領導者吧!
Thumbnail
不要躊躇遲疑,不要搖擺不定。讓自己成為一個意志堅定處事果斷,具備令部屬信服權威的領導者吧!
Thumbnail
你接到一個很重要的專案,其中蘊含了許多非你專業可評估的需求。因此,你要從兩位同事中挑一位副手加入專案團隊。你會怎麼做?
Thumbnail
你接到一個很重要的專案,其中蘊含了許多非你專業可評估的需求。因此,你要從兩位同事中挑一位副手加入專案團隊。你會怎麼做?
Thumbnail
「人力盤點」在組織管理中常被提起,本文會說明「人力盤點」的定義、本質與方法,希望透過了解本質再來使用這項管理手法,才能發揮其效用。
Thumbnail
「人力盤點」在組織管理中常被提起,本文會說明「人力盤點」的定義、本質與方法,希望透過了解本質再來使用這項管理手法,才能發揮其效用。
Thumbnail
在部門管理中,文件化將部門職掌呈現出來,是非常、非常、非常關鍵的作業。本文將說明為何要定義與如何定義部門職掌的方式。
Thumbnail
在部門管理中,文件化將部門職掌呈現出來,是非常、非常、非常關鍵的作業。本文將說明為何要定義與如何定義部門職掌的方式。
Thumbnail
題目敘述 題目會給我們一張Employee 資料表。裡面分別有employee_id、department_id 、primary_flag 等欄位。其中(employee_id, department_id) 是這張資料表的複合主鍵Primary key。 要求我們列出每一位員工的主要歸屬
Thumbnail
題目敘述 題目會給我們一張Employee 資料表。裡面分別有employee_id、department_id 、primary_flag 等欄位。其中(employee_id, department_id) 是這張資料表的複合主鍵Primary key。 要求我們列出每一位員工的主要歸屬
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News