簡體   English   中英

如何在數據框中刪除重復項並首先保留兩個例外?

[英]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')

在這一點上,事情仍然很好,但我被困在接下來的步驟中。 我該怎么做?

  1. 如果 ID 重復且 2020 Amount > 2019 Amount,則將這兩個 Amount 相加
  2. 如果ID重復且2020 Amount = 2019 Amount,則只保留2020
  3. 如果 ID 重復且 2019 Amount > 2020 Amount,則只保留 2019

我怎樣才能實現這三個目標?

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.

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