[英]Find days since last event pandas dataframe
我有一個熊貓數據框:
df12 = pd.DataFrame({'group_ids':[1,1,1,2,2,2],'dates':['2016-04-01','2016-04-20','2016-04-28','2016-04-05','2016-04-20','2016-04-29'],'event_today_in_group':[1,0,1,1,1,0]})
group_ids dates event_today_in_group
0 1 2016-04-01 1
1 1 2016-04-20 0
2 1 2016-04-28 1
3 2 2016-04-05 1
4 2 2016-04-20 1
5 2 2016-04-29 0
我想計算一個額外的列,其中包含每個group_ids,自上次event_today_in_group為1以來的天數。
group_ids dates event_today_in_group days_since_last_event
0 1 2016-04-01 1 0
1 1 2016-04-20 0 19
2 1 2016-04-28 1 27
3 2 2016-04-05 1 0
4 2 2016-04-20 1 15
5 2 2016-04-29 0 9
正如我之前提到的,這將為您提供每組中日期之間的非累積差異:
df['days_since_last_event'] = df.groupby('group_ids')['dates'].diff().apply(lambda x: x.days)
為了得到這個差異的累積和,基於每當event_today_in_group
改變時,我建議使用shift
來獲取前一行的值,然后生成累積總和,如下所示:
df['event_today_in_group'].shift().cumsum()
輸出:
0 NaN
1 1.0
2 1.0
3 2.0
4 3.0
5 4.0
這為我們提供了獲得累積總和所需的第二個分組值。 您可以將上述值分配給新列,但如果您只是將它們用於計算,則可以將它們簡單地包含在后續的groupby
操作中,如下所示:
df.loc[:, 'days_since_last_event'] = df.groupby(['group_ids', df['event_today_in_group'].shift().cumsum()])['days_since_last_event'].cumsum()
結果:
group_ids dates event_today_in_group days_since_last_event
0 1 2016-04-01 1 NaN
1 1 2016-04-20 0 19.0
2 1 2016-04-28 1 27.0
3 2 2016-04-05 1 NaN
4 2 2016-04-20 1 15.0
5 2 2016-04-29 0 9.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.