簡體   English   中英

刪除重復項,保留另一列中具有最高值的行

[英]Drop duplicates keeping the row with the highest value in another column

a = [['John', 'Mary', 'John'], [10,22,50]])
df1 = pd.DataFrame(a, columns=['Name', 'Count'])

給定這樣的數據框,我想將“名稱”的所有類似字符串值與“計數”值進行比較以確定最高值。 我不確定如何在 Python 的數據框中執行此操作。

例如:在上述情況下,答案將是:

  • 姓名計數
  • 瑪麗 22
  • 約翰 50

較低的值 John 10 已被刪除(我只想看到基於“Name”的相同值的“Count”的最高值)。

在 SQL 中,它類似於 Select Case 查詢(其中我選擇 Case where Name == Name & Count > Count recursively 以確定最高數字。或者每個名稱的 For 循環,但據我了解,DataFrames 中的循環是由於對象的性質,這個主意不好。

有沒有辦法用 Python 中的 DF 來做到這一點? 我可以為每個變量創建一個新的數據框(一個只有 John,然后獲得最高值 (df.value()[:1] 或類似值。但因為我有數百個獨特的條目,這似乎是一個糟糕的解決方案。 :D

sort_valuesdrop_duplicates

df1.sort_values('Count').drop_duplicates('Name', keep='last')

   Name  Count
1  Mary     22
2  John     50

或者,就像 Miradulo 所說的, groupbymax

df1.groupby('Name')['Count'].max().reset_index()

   Name  Count
0  John     50
1  Mary     22

暫無
暫無

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

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