DataFrame customers
+-------------+--------+
| Column Name | Type |
+-------------+--------+
| customer_id | int |
| name | object |
| email | object |
+-------------+--------+
在 DataFrame 中基于 email 列存在一些重复行。
编写一个解决方案,删除这些重复行,仅保留第一次出现的行。
返回结果格式如下例所示。
示例 1:
输入:
+-------------+---------+---------------------+
| 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 |
+-------------+---------+---------------------+
输出:
+-------------+---------+---------------------+
| 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 |
+-------------+---------+---------------------+
解释:
Alice (customer_id = 4) 和 Finn (customer_id = 5) 都使用 john@example.com,因此只保留该邮箱地址的第一次出现。
解题方案
1、审题,理解题意
题目中有一个名为 customers 的 DataFrame,它由 customer_id、name 和 email 等列组成。目标是根据 email 列删除重复的行,并只保留所有重复电子邮件的第一个出现。
要删除重复行, 可以用pandas 库操作DataFrame 对象的 drop_duplicates 函数,可以指定被视为重复的行所基于的条件。
drop_duplicates 函数参数定义:
- subset:此参数标识重复行时要考虑的列标签或标签序列。如果未提供,它将处理 DataFrame 中的所有列。
- keep:此参数确定要保留的重复行。
- 'first': (默认) 删除除第一个匹配项以外的重复项。
- 'last': 删除除最后一个匹配项之外的重复项。
- False: 删除所有重复项。
- inplace: 如果设置为 True,则直接对对象进行更改,而不返回新的对象。如果设置为 False(默认),则返回丢弃重复的新对象。
2、解题思路
对于题目,我们可以用如下步骤解决:
- 导入 pandas:
import pandas as pd
- 定义函数:
def dropDuplicateEmails(customers: pd.DataFrame) -> pd.DataFrame: #该行定义了一个名为 dropDuplicateEmails 的新函数,该函数接受 DataFrame customers 作为输入参数并返回 DataFrame。
- 基于电子邮件删除重复行:
customers.drop_duplicates(subset='email', keep='first', inplace=True) #该列在 customers DataFrame 上使用 drop_duplicates 方法。
subset='email': 这意味着我们只考虑基于 email 列的重复项。 keep='first': 这表明我们希望保留任何重复电子邮件的第一个匹配项,并删除后续的匹配项。 inplace=True: 这意味着更改将直接对传入的 DataFrame(customers)进行,而不会返回新的 DataFrame。
- 返回修改后的 DataFrame:
return customers #最后,我们返回修改后的 customers DataFrame,去掉了基于电子邮件的重复行。
3、代码实现
import pandas as pd
def dropDuplicateEmails(customers: pd.DataFrame) -> pd.DataFrame:
customers.drop_duplicates(subset='email', keep='first', inplace=True)
return customers