簡體   English   中英

查找自上次事件pandas數據幀以來的日子

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

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