簡體   English   中英

groupby,統計過去發生的事件,並顯示最近的事件

[英]groupby, count past occurences of events, and show the most recent event

如何按唯一標識符分組並計算最近事件之前的過去拖欠('Bad')和過去非拖欠('Good')的數量。

例如,給定以下 dataframe:

ID    Date         Class    
112   2018-02-12    Good
112   2019-01-20    Bad
113   2018-10-11    Bad
113   2019-01-01    Good
113   2020-02-03    Good

這應該是最終目標:

ID    Past_deliq  Past_non_deliq  Class   Date
112      0           1             Bad    2019-01-20
113      1           1             Good   2020-02-03

我可以通過執行以下操作來獲取最新事件, df.loc[df.groupby('ID').Date.idxmax()] ,但我找不到計算過去事件的方法。

任何幫助是極大的贊賞。

只是一些基本的重塑和crosstab

這個想法是通過不是最大值的值過濾您的 dataframe,進行值計數聚合並重新加入您的 dataframe 與最大日期。

max_date = df.groupby('ID')['Date'].max()
s1 = df.loc[~df.index.isin(df.groupby("ID")["Date"].idxmax())]

df1 = pd.crosstab(s1.ID, s1.Class).join(max_date).rename(
    columns={"Bad": "Past_deliq", "Good": "Past_non_deliq"}
)



     Past_deliq  Past_non_deliq       Date
ID                                        
112           0               1 2019-01-20
113           1               1 2020-02-03
b=df.groupby(["ID","Class"])["Class"].count().unstack()

您將 ID 和 Class 分組,這意味着您將獲得每個 ID 的每個 class 的計數。 比你調用 unstack 從索引中獲取最左邊的標簽並將它們作為列插入。

在您確定最后一次出現的另一個 groupby 之后(此解決方案假設您的數據按日期排序,如果不使用 function max)。

c=df.groupby("ID").agg({"Date":"last","Class":"last"})

合並兩個數據框后。

b.merge(c, on="ID")

你得到你所要求的。

暫無
暫無

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

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