2017-05-17 7 views
1

Ich habe bisher nur in Stata gearbeitet, aber jetzt versuche ich, zu Python zu wechseln. Ich möchte eine Event-Studie durchführen. Genauer gesagt, ich habe 4 feste Termine pro Jahr. Jeden ersten Tag jedes Viertels, z.B. 1. Januar, 1. April ...., und ein Ereignisfenster + - 10 Tage um das Ereignisdatum. Um meine Probe auf das gewünschte Fenster zu partitionieren ich den folgenden Befehl verwenden:Looping durch Daten in Python

smpl = merged.ix[datetime.date(year=2013,month=12,day=21):datetime.date(year=2014,month=1,day=10)] 

Ich mag eine Schleife schreiben, die die ausgewählte Abtastperiode 90 Tage nach vorn in jedem Durchlauf der Schleife automatisch verschiebt, so dass ich kann Führen Sie anschließend die erforderliche Analyse in diesem Schritt aus. Ich weiß, wie man die Analyse durchführt, aber ich weiß nicht, wie man die Probe für jeden Schritt in der Schleife 90 Tage vorwärts verschiebt. Zum Beispiel sollte die nächste Probe in der Schleife sein:

smpl = merged.ix[datetime.date(year=2014,month=3,day=21):datetime.date(year=2014,month=4,day=10)] 

Es ist wahrscheinlich ziemlich einfach, so etwas wie Monat = I und dann durch 3 verschiebt jeden Monat. Ich bin nur zu viel von einem Noob in Python, um die Syntax zu bekommen. Jede Hilfe wird sehr geschätzt.

Antwort

1

Ich würde verwenden:

for beg in pd.date_range('2013-12-21', '2017-05-17', freq='90D'): 
    smpl = merged.loc[beg:beg + pd.Timedelta('20D')] 
    ... 

Demo:

In [158]: for beg in pd.date_range('2013-12-21', '2017-05-17', freq='90D'): 
    ...:  print(beg, beg + pd.Timedelta('20D')) 
    ...: 
2013-12-21 00:00:00 2014-01-10 00:00:00 
2014-03-21 00:00:00 2014-04-10 00:00:00 
2014-06-19 00:00:00 2014-07-09 00:00:00 
2014-09-17 00:00:00 2014-10-07 00:00:00 
2014-12-16 00:00:00 2015-01-05 00:00:00 
2015-03-16 00:00:00 2015-04-05 00:00:00 
2015-06-14 00:00:00 2015-07-04 00:00:00 
2015-09-12 00:00:00 2015-10-02 00:00:00 
2015-12-11 00:00:00 2015-12-31 00:00:00 
2016-03-10 00:00:00 2016-03-30 00:00:00 
2016-06-08 00:00:00 2016-06-28 00:00:00 
2016-09-06 00:00:00 2016-09-26 00:00:00 
2016-12-05 00:00:00 2016-12-25 00:00:00 
2017-03-05 00:00:00 2017-03-25 00:00:00