如何在 Pandas 时间序列中计算“事件”之间的时间(天数)?例如,如果我有以下时间序列,我想知道在系列中的每一天距上一个 TRUE
事件过去了多少天。
event
2010-01-01 False
2010-01-02 True
2010-01-03 False
2010-01-04 False
2010-01-05 True
2010-01-06 False
我现在的做法看起来过于复杂,所以希望能有更加优雅的方法。显然用for循环迭代每一行是可行的,但我希望找到一个向量化(可扩展)的解决方案。以下是我目前的尝试:
date_range = pd.date_range('2010-01-01', '2010-01-06')
df = pd.DataFrame([False, True, False, False, True, False], index=date_range, columns=['event'])
event_dates = df.index[df['event']]
df2 = pd.DataFrame(event_dates, index=event_dates, columns=['max_event_date'])
df = df.join(df2)
df['max_event_date'] = df['max_event_date'].cummax(axis=0, skipna=False)
df['days_since_event'] = df.index - df['max_event_date']
event max_event_date days_since_event
2010-01-01 False NaT NaT
2010-01-02 True 2010-01-02 0 days
2010-01-03 False 2010-01-02 1 days
2010-01-04 False 2010-01-02 2 days
2010-01-05 True 2010-01-05 0 days
2010-01-06 False 2010-01-05 1 days