【发布时间】: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会删除两者,而其他两个选项保留一个。