簡體   English   中英

pandas drop_duplicates() "keep" 參數給出了截然不同的答案——它是如何工作的?

[英]pandas drop_duplicates() "keep" parameter gives very different answers - how does it work?

我有一個奧運運動員參加比賽的 CSV 數據集。

功能是:id、姓名、性別、年齡、游戲、年份、運動

我需要找到:

在 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() 官方文檔

keep : {'first', 'last', False}, 默認'first' first : Drop

除第一次出現外,重復。 last : 刪除重復項

除了最后一次出現。 False :刪除所有重復項。

我找到了正確的答案,但是我仍然不明白為什么它會根據 'keep=False' 參數給我非常不同的答案。

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 沒有數據,因為整個列都是重復的,所以全部都被刪除了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM