2016-06-14 2 views
3

Ich habe eine Pandas, die Datenrahmen Wie bekomme ich die Datumsangaben vor und nach bestimmten Daten in Pandas?

col1 
2015-02-02 
2015-04-05 
2016-07-02 

Ich möchte hinzufügen, für jedes Datum in Spalte 1, die x Tage vor und x Tage nach diesem Datum wie

aussieht.

Das bedeutet, dass der resultierende Datenrahmen mehr Zeilen enthält (insbesondere n (1 + 2 * x), wobei n die Anzahl der Originaldaten in col1)

Wie kann ich tun, dass in einem richtigen Pandonic Weg?

Ausgang würde (für x=1)

col1 
2015-01-01 
2015-01-02 
2015-01-03 
2015-04-04 
etc 

Dank sein!

+1

machen Sie DF haben nur eine Spalte: 'col1'? – MaxU

+0

ja, das ist im Grunde ein DataFrame von Daten. Bei Bedarf können wir es auch als Serie verwenden. –

Antwort

1

Sie können es auf diese Weise tun, aber ich bin mir nicht sicher, dass es der beste/schnellste Weg, es zu tun:

In [143]: df 
Out[143]: 
     col1 
0 2015-02-02 
1 2015-04-05 
2 2016-07-02 

In [144]: %paste 
N = 2 
(df.col1.apply(lambda x: pd.Series(pd.date_range(x - pd.Timedelta(days=N), 
               x + pd.Timedelta(days=N)) 
         ) 
     ) 
     .stack() 
     .drop_duplicates() 
     .reset_index(level=[0,1], drop=True) 
     .to_frame(name='col1') 
) 
## -- End pasted text -- 
Out[144]: 
     col1 
0 2015-01-31 
1 2015-02-01 
2 2015-02-02 
3 2015-02-03 
4 2015-02-04 
5 2015-04-03 
6 2015-04-04 
7 2015-04-05 
8 2015-04-06 
9 2015-04-07 
10 2016-06-30 
11 2016-07-01 
12 2016-07-02 
13 2016-07-03 
14 2016-07-04 
1

So etwas nimmt einen Datenrahmen mit einer datetime.date Spalte und stapelt dann einen weiteren Series darunter mit timedelta Verschiebungen zu den ursprünglichen Daten.

import datetime 
import pandas as pd 
df = pd.DataFrame([{'date': datetime.date(2016, 1, 2)}, {'date': datetime.date(2016, 1, 1)}], columns=['date']) 
df = pd.concat([df.date, df.date + datetime.timedelta(days=1)], ignore_index=True).to_frame() 
+0

ausgezeichnet, aber der Punkt ist, alles in einer Spalte abgesteckt zu haben –

+1

Ich bin mir nicht sicher, ob ich das verstehe. So vertikal stapeln? –

+0

Blick auf meine Ausgabe, können Sie sehen, dass Col1 enthält mehr Zeilen. Es enthält die Originaldaten, aber auch die Daten vor und nach diesen Tagen. –

Verwandte Themen