簡體   English   中英

Pandas 刪除重復但保持最大值

[英]Pandas drop duplicates but keep maximum value

我確信已經問過這個問題的變體,但我有一個非常具體的場景,我需要有效地執行。

想象一個 dataframe 如下所示:

日期 價值 ID
2021-03-29 100 1
2021-03-29 50 1
2021-03-28 90 1
2021-03-28 100 1
2021-03-27 110 1
2021-03-29 100 2
2021-03-29 50 2
2021-03-28 90 2
2021-03-28 100 2
2021-03-27 110 2

您會注意到,在這個 dataframe 中,每個“id”都有重復的“日期”。 這是一個報告錯誤,所以我想做的是 go 通過每個“id”並完全刪除一個重復的日期行。

我想保留每個重復日期的版本,它具有更大的“價值”。

我理想的結果 dataframe 看起來像這樣:

日期 價值 ID
2021-03-29 100 1
2021-03-28 100 1
2021-03-27 110 1
2021-03-29 100 2
2021-03-28 100 2
2021-03-27 110 2

我也在一個相對較大的數據集(約 250 萬條記錄)上執行此操作,因此我想找到一個相對較快的解決方案(比僅僅 for 循環和手動執行此操作更好)。

我建議按降序排序value並使用drop_duplicates刪除具有重復Dateid值的值。 第一個值(例如最高),將默認保留

df.sort_values("Value", ascending = False).drop_duplicates(subset=["Date", "id"], keep="first")

        Date  Value  id
4 2021-03-27    110   1
9 2021-03-27    110   2
0 2021-03-29    100   1
3 2021-03-28    100   1
5 2021-03-29    100   2
8 2021-03-28    100   2

如果需要,您可以通過將.sort_values(["id", "Date"])鏈接到末尾來重新排序以獲得所需 output 的排序

暫無
暫無

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

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