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

82會員
417Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們在原有的資料表上,建立一個新的column叫做"bonus",初始化成"salary"欄位兩倍的數值。 也就是說,新的"bonus"紅利欄位的數值,是原本"salary"薪水欄位的兩倍。 題目的原文敘述 測試範例
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們回傳student_id為101的這筆資料,並且列出它的"name"和"age"欄位。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ |
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們回傳資料表的前3個Row。 題目的原文敘述 測試範例 Example 1: Input: DataFrame employees +-------------+-----------+-------------
題目敘述 題目會給定一個pandas DataFrame,要求我們回傳該紀錄表的高度和寬度,也就是對應的number of rows和number of columns。 題目的原文敘述
題目敘述 題目會給定一個python list形式的輸入,要求我們把它轉換成pandas dataframe的形式做輸出。並且指定column名稱分別為student_id, 和 age 題目的原文敘述 測試範例
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們在原有的資料表上,建立一個新的column叫做"bonus",初始化成"salary"欄位兩倍的數值。 也就是說,新的"bonus"紅利欄位的數值,是原本"salary"薪水欄位的兩倍。 題目的原文敘述 測試範例
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們回傳student_id為101的這筆資料,並且列出它的"name"和"age"欄位。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ |
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們回傳資料表的前3個Row。 題目的原文敘述 測試範例 Example 1: Input: DataFrame employees +-------------+-----------+-------------
題目敘述 題目會給定一個pandas DataFrame,要求我們回傳該紀錄表的高度和寬度,也就是對應的number of rows和number of columns。 題目的原文敘述
題目敘述 題目會給定一個python list形式的輸入,要求我們把它轉換成pandas dataframe的形式做輸出。並且指定column名稱分別為student_id, 和 age 題目的原文敘述 測試範例
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
既然都到了韓國,來品嘗當地知名早餐,是相當合理的一件事情。EGG DROP是2017年起源自首爾的雞蛋三明治店,據說是從美國獲得的靈感,最後變成有名的韓式吐司啦。目前全韓國有超過290間分店,釜山街頭也看到它的蹤跡,順便吃吃看絕對是合理的吧。
Thumbnail
美國小學的開學第一天為Supply drop-off day,這一個很少有的機會開放家長到學校裡。我們剛到美國對這一天的定義懵懵懂懂.... 是送小孩上學? 她不用搭校車? 放學誰接? 還是只要過去一下下? 原來這一天是要帶著小孩一同前往學校,認識校園班級,見見老師及同學,最重要的就是把一整年
Thumbnail
你好,我是查理。 這視頻講的是關於垂直落差的。 如何在下桿時使用桿頭。 這在棒球運動中很常見,但在高爾夫運動中卻鮮為人知。 強大玩家多年來一直這樣做的。 用那個方法,已經弄清楚了球直飛了,不旋轉了。 這就是為什麼世界認為這是理所當然的道理。 我說的是下桿時桿頭的垂直落差(下降桿頭)。 CHAGOL
Thumbnail
【IoTeX 提案:更新 Burn-Drop 的結構】 此提案提出從 Burn-Drop 第 5 階段開始時(即在 15,000 個設備註冊在 IoteX 網絡後)引入新的 Burn-Drop 結構。核心團隊預計該新的 Burn-Drop 將在 2022 年第三季度末開始。
Thumbnail
身為薄荷/藥草重度上癮患者,怎麼可能沒有踩在產品的尖端。
Thumbnail
民生東路上這棟陳舊的老屋建築 J.Chen Apt (陳公寓),是由從事舊物家具長達10年以上的空間設計師James Chen,所設計的複合施設空間;1樓是鬆餅店,2樓則是偷閒咖啡 Drop by coffee。除了靠近吧檯前緣的手沖咖啡沖煮區,有幾處單人座位,再來就是靠窗擺張黑色皮沙發...
Thumbnail
台北的大安區永遠不乏美麗的咖啡館,近仁愛圓環四維路的巷弄裡,夜裡發現這家lil Drop coffee 小水滴咖啡,第一眼就會被這墊高建築所特地開的大面窗景給吸引住,沉穩深藍色系裝潢,理論上應該要是店門的入口處卻少了樓梯,那店門到底在哪裡呢?
一直存金融股、ETF,你會覺資本利得成長慢嗎,看看網家(PcHome),富邦媒(momo)為什麼有獲利潛力。宏達電賣加拿大商Shopify股份,就能損益兩平,在台灣Dropshipping直運網店電商是不是有成長空間?  Dropshipping 直運是什麼?跨國經營電商,在Shopify開網店半年
Singapore on Saturday saw a drop in its daily tally of new coronavirus cases as the city-state reported 753 new Covid-19 cases, taking the country's t
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
既然都到了韓國,來品嘗當地知名早餐,是相當合理的一件事情。EGG DROP是2017年起源自首爾的雞蛋三明治店,據說是從美國獲得的靈感,最後變成有名的韓式吐司啦。目前全韓國有超過290間分店,釜山街頭也看到它的蹤跡,順便吃吃看絕對是合理的吧。
Thumbnail
美國小學的開學第一天為Supply drop-off day,這一個很少有的機會開放家長到學校裡。我們剛到美國對這一天的定義懵懵懂懂.... 是送小孩上學? 她不用搭校車? 放學誰接? 還是只要過去一下下? 原來這一天是要帶著小孩一同前往學校,認識校園班級,見見老師及同學,最重要的就是把一整年
Thumbnail
你好,我是查理。 這視頻講的是關於垂直落差的。 如何在下桿時使用桿頭。 這在棒球運動中很常見,但在高爾夫運動中卻鮮為人知。 強大玩家多年來一直這樣做的。 用那個方法,已經弄清楚了球直飛了,不旋轉了。 這就是為什麼世界認為這是理所當然的道理。 我說的是下桿時桿頭的垂直落差(下降桿頭)。 CHAGOL
Thumbnail
【IoTeX 提案:更新 Burn-Drop 的結構】 此提案提出從 Burn-Drop 第 5 階段開始時(即在 15,000 個設備註冊在 IoteX 網絡後)引入新的 Burn-Drop 結構。核心團隊預計該新的 Burn-Drop 將在 2022 年第三季度末開始。
Thumbnail
身為薄荷/藥草重度上癮患者,怎麼可能沒有踩在產品的尖端。
Thumbnail
民生東路上這棟陳舊的老屋建築 J.Chen Apt (陳公寓),是由從事舊物家具長達10年以上的空間設計師James Chen,所設計的複合施設空間;1樓是鬆餅店,2樓則是偷閒咖啡 Drop by coffee。除了靠近吧檯前緣的手沖咖啡沖煮區,有幾處單人座位,再來就是靠窗擺張黑色皮沙發...
Thumbnail
台北的大安區永遠不乏美麗的咖啡館,近仁愛圓環四維路的巷弄裡,夜裡發現這家lil Drop coffee 小水滴咖啡,第一眼就會被這墊高建築所特地開的大面窗景給吸引住,沉穩深藍色系裝潢,理論上應該要是店門的入口處卻少了樓梯,那店門到底在哪裡呢?
一直存金融股、ETF,你會覺資本利得成長慢嗎,看看網家(PcHome),富邦媒(momo)為什麼有獲利潛力。宏達電賣加拿大商Shopify股份,就能損益兩平,在台灣Dropshipping直運網店電商是不是有成長空間?  Dropshipping 直運是什麼?跨國經營電商,在Shopify開網店半年
Singapore on Saturday saw a drop in its daily tally of new coronavirus cases as the city-state reported 753 new Covid-19 cases, taking the country's t