[英]How to drop duplicates in a data frame and keep first with two exceptions?
我有一個看起來像這樣的數據框。
import pandas as pd
# intialise data of lists.
data = {'ID':[101762, 101762, 102842, 102842, 106755, 106755, 108615, 108615, 113402, 113402, 114711, 114711],
'Year':[2019, 2020, 2019, 2020, 2019, 2020, 2019, 2020, 2019, 2020, 2019, 2020],
'Amount':[2091.06, 3330.00, 846.19, 846.19, 16185.60, 800, 281496.00, 1363730.00, 19815.00, 9585.00, 64332.70, 5400.00]}
# Create DataFrame
df = pd.DataFrame(data)
# Print the output.
df
這是一張圖像,其中包含我正在嘗試做的一些邏輯。
需要刪除 Amount = 0 或 Year = 2012 的任何內容
df = df[df['Amount'] != 0]
df = df[df['Year'] != '2021']
好的,到目前為止。 現在,如果 ID 和年份出現不止一次,我需要保持最大金額。 這是我正在運行的代碼。
df = df.sort_values(['ID','Year']).drop_duplicates(['ID','Year'], keep='first')
在這一點上,事情仍然很好,但我被困在接下來的步驟中。 我該怎么做?
我怎樣才能實現這三個目標?
sort_values
的一點邏輯
out = df.sort_values('Year',ascending=False).drop_duplicates(['ID','Amount']).sort_values('Amount').groupby('ID').agg({'Year':'last','Amount':'sum'}).reset_index()
ID Year Amount
0 101762 2020 5421.06
1 102842 2020 846.19
2 106755 2019 16985.60
3 108615 2020 1645226.00
4 113402 2019 29400.00
5 114711 2019 69732.70
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.