Drop Duplicate Rows 刪除重複的data row_Intro to Pandas

更新 發佈閱讀 8 分鐘

題目敘述

題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表email欄位為比較基準,刪除重複的列 data rows,只保留最早第一次出現的。

題目的原文敘述


測試範例

Example 1:
Input:
+-------------+---------+---------------------+
| customer_id | name | email |
+-------------+---------+---------------------+
| 1 | Ella | emily@example.com |
| 2 | David | michael@example.com |
| 3 | Zachary | sarah@example.com |
| 4 | Alice | john@example.com |
| 5 | Finn | john@example.com |
| 6 | Violet | alice@example.com |
+-------------+---------+---------------------+
Output:
+-------------+---------+---------------------+
| customer_id | name | email |
+-------------+---------+---------------------+
| 1 | Ella | emily@example.com |
| 2 | David | michael@example.com |
| 3 | Zachary | sarah@example.com |
| 4 | Alice | john@example.com |
| 6 | Violet | alice@example.com |
+-------------+---------+---------------------+
Explanation:
Alic (customer_id = 4) and Finn (customer_id = 5) both use john@example.com, so only the first occurrence of this email is retained.

john@example.com 在原本的資料表中的email欄位出現重複,我們只保留第一筆最早出現的。
| 4 | Alice | john@example.com |

演算法

這一題乍看簡單,但是實際上考的是細心度。

通常有接觸過pandas的同學,直覺就會想到去除重複,那就呼叫df.drop_duplicates()來回傳答案。

確實,這題的確是使用這個內建function,但是要記得帶入正確的參數,在題目指定的欄位email上作為比較基準,才是真正正確的答案。


程式碼

import pandas as pd

def dropDuplicateEmails(customers: pd.DataFrame) -> pd.DataFrame:

# Drop duplicates on based on "email" column
customers.drop_duplicates(subset='email', keep='first', inplace=True)
return customers

再次提醒,這題直接呼叫customers.drop_duplicates()使用默認參數是錯的喔。


複雜度分析

時間複雜度:

​需要從上到下掃描data row,並且以email欄位為比較基準,去刪除重複的data row,所需時間為O(n)。

空間複雜度:

最差情況下,就是每一筆資料都沒有重複,那麼最後資料表還是和原本的一樣大,所需空間為O(n)。


Pandas 官方關於DataFrame及其df.drop_duplicates()的說明文件

若是第一次學習df.drop_duplicates()的同學,可以仔細觀察不同參數下,所帶來的差異。

範例程式碼:

>>>df = pd.DataFrame({
'brand': ['Yum Yum', 'Yum Yum', 'Indomie', 'Indomie', 'Indomie'],
'style': ['cup', 'cup', 'cup', 'pack', 'pack'],
'rating': [4, 4, 3.5, 15, 5]
})

df
brand style rating
0 Yum Yum cup 4.0
1 Yum Yum cup 4.0
2 Indomie cup 3.5
3 Indomie pack 15.0
4 Indomie pack 5.0
# By default, it removes duplicate rows based on all columns.


>>>df.drop_duplicates()
brand style rating
0 Yum Yum cup 4.0
2 Indomie cup 3.5
3 Indomie pack 15.0
4 Indomie pack 5.0
# To remove duplicates on specific column(s), use subset.


>>>df.drop_duplicates(subset=['brand'])
brand style rating
0 Yum Yum cup 4.0
2 Indomie cup 3.5
# To remove duplicates and keep last occurrences, use keep.


>>>df.drop_duplicates(subset=['brand', 'style'], keep='last')
brand style rating
1 Yum Yum cup 4.0
2 Indomie cup 3.5
4 Indomie pack 5.0

Reference:

[1] By drop_duplicates( subset='email', keep='first', inplace=True) [w/ Study resource] - Drop Duplicate Rows - LeetCode

留言
avatar-img
留言分享你的想法!
avatar-img
小松鼠的演算法樂園
96會員
427內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/04/30
在沙龍主頁面的右上角,現在多一個放大鏡圖案的搜尋介面。 裡面可以輸入你想看的主題、關鍵字或者Leetcode題號, 就可以找到相關的文章與演算法框架分析。 例如: 搜尋 DFS 搜尋 DP 搜尋 圖論 搜尋 Coin Change ... 歡迎舊雨新知多多利用!
Thumbnail
2024/04/30
在沙龍主頁面的右上角,現在多一個放大鏡圖案的搜尋介面。 裡面可以輸入你想看的主題、關鍵字或者Leetcode題號, 就可以找到相關的文章與演算法框架分析。 例如: 搜尋 DFS 搜尋 DP 搜尋 圖論 搜尋 Coin Change ... 歡迎舊雨新知多多利用!
Thumbnail
2024/01/10
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們列出所有體重>100公斤的動物的名字,並且必須依照體重weight作降序排列。 題目的原文敘述 測試範例 Example 1: Input: DataFrame animals: +----------+-
Thumbnail
2024/01/10
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們列出所有體重>100公斤的動物的名字,並且必須依照體重weight作降序排列。 題目的原文敘述 測試範例 Example 1: Input: DataFrame animals: +----------+-
Thumbnail
2024/01/09
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表為基礎,融合不同的資料欄位。 以product作為index,融合quarter_1,quarter_2,quarter_3,quarter_4 這四個欄位,並且重新命名為quarter,並且將數值欄位名稱重
Thumbnail
2024/01/09
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表為基礎,融合不同的資料欄位。 以product作為index,融合quarter_1,quarter_2,quarter_3,quarter_4 這四個欄位,並且重新命名為quarter,並且將數值欄位名稱重
Thumbnail
看更多
你可能也想看
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表為基礎,融合不同的資料欄位。 以product作為index,融合quarter_1,quarter_2,quarter_3,quarter_4 這四個欄位,並且重新命名為quarter,並且將數值欄位名稱重
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表為基礎,融合不同的資料欄位。 以product作為index,融合quarter_1,quarter_2,quarter_3,quarter_4 這四個欄位,並且重新命名為quarter,並且將數值欄位名稱重
Thumbnail
題目敘述 題目會給定兩個pandas DataFrame作為輸入,要求我們將兩張資料表,依照原有的順序串接在一起。 題目的原文敘述 測試範例 Example 1: Input: df1 +------------+---------+-----+ | student_id | name
Thumbnail
題目敘述 題目會給定兩個pandas DataFrame作為輸入,要求我們將兩張資料表,依照原有的順序串接在一起。 題目的原文敘述 測試範例 Example 1: Input: df1 +------------+---------+-----+ | student_id | name
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們在原有的資料表上,將所有在欄位quantity的缺失值填補為0。 題目的原文敘述 測試範例 Example 1: Input:+-----------------+----------+-------+ | nam
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們在原有的資料表上,將所有在欄位quantity的缺失值填補為0。 題目的原文敘述 測試範例 Example 1: Input:+-----------------+----------+-------+ | nam
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們在原有的資料表上,將所有的column資料欄位名稱重新命名。 id 改名為 student_id first 改名為 first_name last 改名為 last_name age 改名為 age_in_year
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們在原有的資料表上,將所有的column資料欄位名稱重新命名。 id 改名為 student_id first 改名為 first_name last 改名為 last_name age 改名為 age_in_year
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表salary欄位為基準,把每一筆資料的薪水salary欄位值更新為原本的兩倍。 題目的原文敘述 測試範例 Example 1: Input: DataFrame employees +--------
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表salary欄位為基準,把每一筆資料的薪水salary欄位值更新為原本的兩倍。 題目的原文敘述 測試範例 Example 1: Input: DataFrame employees +--------
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表name欄位為檢查基準,刪除有缺失值None的 data rows。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ | s
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表name欄位為檢查基準,刪除有缺失值None的 data rows。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ | s
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表email欄位為比較基準,刪除重複的列 data rows,只保留最早第一次出現的。 題目的原文敘述 Example 1: Input: +-------------+---------+--------
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表email欄位為比較基準,刪除重複的列 data rows,只保留最早第一次出現的。 題目的原文敘述 Example 1: Input: +-------------+---------+--------
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們回傳student_id為101的這筆資料,並且列出它的"name"和"age"欄位。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ |
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們回傳student_id為101的這筆資料,並且列出它的"name"和"age"欄位。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ |
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News