[英]pandas: how to select first or last by column in keep with drop_duplicates
[英]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”的解釋:
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.