date name breed weight_kg
02018-09-02 Bella Labrador 24.8712019-06-07 Max Chow Chow 24.0122019-03-19 Charlie Poodle 24.9532018-01-17 Stella Chihuahua 1.5142019-10-19 Lucy Chow Chow 24.0772019-03-30 Cooper Schnauzer 16.91102019-01-04 Bernie St. Bernard 74.98技术支持
date name breed weight_kg
02018-09-02 Bella Labrador 24.8712019-03-13 Max Chow Chow 24.1322019-03-19 Charlie Poodle 24.9532018-01-17 Stella Chihuahua 1.5142019-10-19 Lucy Chow Chow 24.0762019-06-07 Max Labrador 28.3572019-03-30 Cooper Schnauzer 16.91102019-01-04 Bernie St. Bernard 74.98技术支持
若要基于多列来删除重复项,我们可以向 subset 参数传入列名列表,在本例中为 name 和 breed。
首先,删除 sales 中 store 与 type 的重复配对行,保存为 store_types 并打印其前几行。
然后,删除 sales 中 store 与 department 的重复配对行,保存为 store_depts 并打印其前几行。
筛选节假周所在的行,并删除重复的 dates,保存为 holiday_dates。
最后,选择 holiday_dates 的 date 列,并打印 holiday_dates 数据框。
# Drop duplicate store/type combinations
store_types = sales.drop_duplicates(subset=["store","type"])print(store_types.head())# Drop duplicate store/department combinations
store_depts = sales.drop_duplicates(subset=["store","department"])print(store_depts.head())# Subset the rows that are holiday weeks and drop duplicate dates
holiday_dates = sales[sales["is_holiday"]].drop_duplicates(subset="date")# Print date col of holiday_datesprint(holiday_dates["date"])技术支持
运行上述代码,将产生如下结果:
store type department date weekly_sales is_holiday temperature_c fuel_price_usd_per_l unemployment
01A12010-02-0524924.50 False 5.7280.6798.1069012A12010-02-0535034.06 False 4.5500.6798.32417984A12010-02-0538724.42 False 6.5330.6868.62326996A12010-02-0525619.00 False 4.6830.6797.259359310B12010-02-0540212.84 False 12.4110.7829.765
store type department date weekly_sales is_holiday temperature_c fuel_price_usd_per_l unemployment
01A12010-02-0524924.50 False 5.7280.6798.106121A22010-02-0550605.27 False 5.7280.6798.106241A32010-02-0513740.12 False 5.7280.6798.106361A42010-02-0539954.04 False 5.7280.6798.106481A52010-02-0532229.38 False 5.7280.6798.1064982010-09-106912011-11-2523152010-02-1267352012-09-0768102010-12-3168152012-02-1068202011-09-09Name: date,dtype: datetime64[ns]技术支持
删除重复项是一项获取准确计数的基本技能,因为您通常不希望将同一事物多次计入。在 Python 中,可以使用 Pandas 模块来完成,此模块提供了一个名为
drop_duplicates的方法。下面通过几个示例来理解如何使用它。
删除重复的姓名
假设您有一个包含就诊记录的数据框,兽医诊所想知道每个品种有多少只狗来过。然而,在您的数据集中有像 Max 和 Stella 这样的狗看过不止一次。因此,您不能仅通过统计品种列中每个品种的数量来得到结果。
为此,您需要移除那些包含之前已出现过的狗名的行,换句话说,您将从数据集中每个名字各保留一只狗。
您可以使用
drop_duplicates方法来实现。它接收一个参数subset,即我们基于其查找重复项的列——在这个例子中,我们想要所有唯一的名字。但是,如果有同名的狗该怎么办?
删除重复的成对组合
在这种情况下,删除重复项时需要考虑的不仅仅是
name。由于两个Max属于不同的品种,我们可以删除数据集中之前已出现过的“名字与品种”配对组合的行。若要基于多列来删除重复项,我们可以向 subset 参数传入列名列表,在本例中为 name 和 breed。
现在两个 Max 都被保留了。
交互式示例
在本练习中,您将使用
sales中的唯一值创建一些新的 DataFrame。sales已可用,且已将pandas以pd导入。您将执行以下步骤:
sales中store与type的重复配对行,保存为store_types并打印其前几行。sales中store与department的重复配对行,保存为store_depts并打印其前几行。dates,保存为holiday_dates。holiday_dates的date列,并打印holiday_dates数据框。运行上述代码,将产生如下结果:
亲自试一试。
若要进一步了解计数与聚合数据,请观看我们课程 Data Manipulation with pandas 中的此视频。
本文内容摘自 DataCamp 的课程 Data Manipulation with pandas,作者为 Maggie Matsui 和 Richie Cotton。