zsljulius
zsljulius

Reputation: 4103

How to calculate a index series for a event window

Suppose I have a time series like so:

pd.Series(np.random.rand(20), index=pd.date_range("1990-01-01",periods=20))

1990-01-01    0.018363
1990-01-02    0.288625
1990-01-03    0.460708
1990-01-04    0.663063
1990-01-05    0.434250
1990-01-06    0.504893
1990-01-07    0.587743
1990-01-08    0.412223
1990-01-09    0.604656
1990-01-10    0.960338
1990-01-11    0.606765
1990-01-12    0.110480
1990-01-13    0.671683
1990-01-14    0.178488
1990-01-15    0.458074
1990-01-16    0.219303
1990-01-17    0.172665
1990-01-18    0.429534
1990-01-19    0.505891
1990-01-20    0.242567
Freq: D, dtype: float64

Suppose the event date is on 1990-01-05 and 1990-01-15. I want to subset the data down to a window of length (-2,+2) around the event, but with an added column yielding the relative number of days from the event date (which has value 0):

1990-01-01    0.460708  -2
1990-01-04    0.663063  -1
1990-01-05    0.434250  0
1990-01-06    0.504893  1
1990-01-07    0.587743  2
1990-01-13    0.671683  -2
1990-01-14    0.178488  -1
1990-01-15    0.458074   0
1990-01-16    0.219303   1
1990-01-17    0.172665   2
Freq: D, dtype: float64

This question is related to my previous question here : Event Study in Pandas

Upvotes: 0

Views: 200

Answers (1)

Scott Boston
Scott Boston

Reputation: 153470

Leveraging your previous solution from 'Event Study in Pandas' by @jezrael:

import numpy as np
import pandas as pd

s  = pd.Series(np.random.rand(20), index=pd.date_range("1990-01-01",periods=20))

date1 = pd.to_datetime('1990-01-05')
date2 = pd.to_datetime('1990-01-15')
window = 2

dates = [date1, date2]

s1 = pd.concat([s.loc[date - pd.Timedelta(window, unit='d'): 
                      date + pd.Timedelta(window, unit='d')] for date in dates])

Convert to dataframe:

df = s1.to_frame()

df['Offset'] = pd.Series(data=np.arange(-window,window+1).tolist()*len(dates),index=s1.index)

df

Upvotes: 1

Related Questions