【问题标题】:pandas drop_duplicates() "keep" parameter gives very different answers - how does it work?pandas drop_duplicates() “keep”参数给出了截然不同的答案——它是如何工作的?
【发布时间】:2019-09-03 19:17:06
【问题描述】:

我有参加比赛的奥运会运动员的 CSV 数据集。

特征是:id,Name,Sex,Age,Games,Year,Sport

我需要找到:

男性篮球运动员占所有男性的百分比是多少 2012年奥运会的参与者?将答案四舍五入到第一个 十进制。

一个运动员可以参加各种形式的比赛,所以会有重复。

我用这段代码查询,不带“keep”参数:

    males_2012 = data[   (data['Sex']=='M') & (data['Year']==2012)].drop_duplicates(subset=['ID',],inplace=False)
    len(males_2012) # gives 5863 

但是,如果我使用“keep=False”进行查询,它会给我提供更小的数据集:

males_2012 = data[   (data['Sex']=='M') & (data['Year']==2012) ].drop_duplicates(subset=['ID',], 
keep=False,inplace=False)
    len(males_2012) # 5020

官方drop重复参数“keep”的解释:

drop_duplicates() official docs

keep : {‘first’, ‘last’, False}, 默认‘first’ first : Drop

重复,除了第一次出现。 last : 删除重复项

除了最后一次出现。 False :删除所有重复项。

我找到了正确的答案,但我仍然不明白为什么它会根据 'keep=False' 参数给我非常不同的答案。

【问题讨论】:

  • 您的问题不清楚。哪一块让你感到困惑?如果不传入参数,则默认保留第一条记录。如果您传入False,它不会保留任何记录。计数的差异应该是这两个数字之间的差异。不是这样吗?
  • keep=False 删除 所有 个重复项。例如,如果您有两行具有相同的值,keep=False 会删除两者,而其他两个选项保留一个。

标签: python pandas


【解决方案1】:

keep 定义了要保留的重复值。

1) First 指定保留第一个重复值并丢弃其余值。

2) Last 指定保留最后一个重复值并丢弃其余的。

3) False 指定删除所有重复项。

考虑这个例子:

df = pd.DataFrame({'A': [1,1,1,1]})

print(df.drop_duplicates(keep='first'))
print(df.drop_duplicates(keep='last'))
print(df.drop_duplicates(keep=False))

输出是:

   A
0  1
   A
3  1
Empty DataFrame
Columns: [A]
Index: []

我们可以在第一个df中看到,保留的元素在索引0处,所以它是第一个元素。第二个 df 的索引为 3,因此它是最后一个元素。最后一个 df 没有数据,因为整个列都是重复的,所以全部都被删除了。

【讨论】:

  • 哦,所以如果我有 3 个 ID 并且 keep = false,它将删除所有 3 个并且在数据集中不保留任何内容..?
  • 重现我的数据集并添加列BC 重复值并试一试:P
猜你喜欢
  • 2012-09-28
  • 2019-09-19
  • 1970-01-01
  • 2019-11-02
  • 2020-10-03
  • 2017-01-25
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
相关资源
最近更新 更多