[英]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.