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