2016-03-23 10 views
2

Ich habe Pandas Dataframe mit einer Spalte, die Minuten und Sekunden (datetime) hat. Die Zeitreihe dauert mehrere Stunden. Wenn also eine neue Stunde beginnt, beginnen die Minuten und Sekunden wieder bei 0. Ich möchte jedes Mal, wenn es rollt, eine Stunde zur Datumszeit hinzufügen. Hat jemand irgendwelche Vorschläge für eine einfache Möglichkeit, dies zu tun?Wie füge ich eine Stunde "Spalte" zu einer Datetime-Serie mit nur Minuten und Sekunden

-Code meiner Daten in

TempDataFrame = pandas.read_csv(filepath_or_buffer=TempDataFilePath, header=0, sep=',', skiprows = 7, encoding='latin-1') 
TempDataFrame['Date/Time'] = pandas.to_datetime(TempDataFrame['Date/Time'], format='%M:%S.%f') 

Beispiel von dem, was meine Datetime-Spalte sieht aus wie jetzt zu laden.

1900-01-01 0:27:58 
1900-01-01 0:27:59 
1900-01-01 0:28:00 
1900-01-01 0:28:01 
........ 
1900-01-01 0:59:57 
1900-01-01 0:59:58 
1900-01-01 0:59:59 
1900-01-01 0:00:00 
1900-01-01 0:00:01 
1900-01-01 0:00:02 
........ 
1900-01-01 0:59:57 
1900-01-01 0:59:58 
1900-01-01 0:59:59 
1900-01-01 0:00:00 
1900-01-01 0:00:01 
1900-01-01 0:00:02 
etc... 

Beispiel das, was ich mit

1900-01-01 0:27:58 
1900-01-01 0:27:59 
1900-01-01 0:28:00 
1900-01-01 0:28:01 
........ 
1900-01-01 0:59:57 
1900-01-01 0:59:58 
1900-01-01 0:59:59 
1900-01-01 1:00:00 
1900-01-01 1:00:01 
1900-01-01 1:00:02 
........ 
1900-01-01 1:59:57 
1900-01-01 1:59:58 
1900-01-01 1:59:59 
1900-01-01 2:00:00 
1900-01-01 2:00:01 
1900-01-01 2:00:02 
etc... 

Antwort

2

IIUC dann am Ende möchte dies funktioniert:

In [175]: 
df['datetime'] = df['datetime'] + pd.TimedeltaIndex((df['datetime'] < df['datetime'].shift()).cumsum(), 'H') 
df 

Out[175]: 
       datetime 
0 1900-01-01 00:27:58 
1 1900-01-01 00:27:59 
2 1900-01-01 00:28:00 
3 1900-01-01 00:28:01 
4 1900-01-01 00:59:57 
5 1900-01-01 00:59:58 
6 1900-01-01 00:59:59 
7 1900-01-01 01:00:00 
8 1900-01-01 01:00:01 
9 1900-01-01 01:00:02 
10 1900-01-01 01:59:57 
11 1900-01-01 01:59:58 
12 1900-01-01 01:59:59 
13 1900-01-01 02:00:00 
14 1900-01-01 02:00:01 
15 1900-01-01 02:00:02 

Also das die Datetimes mit der vorherige Reihe vergleicht shift mit und Wenn dies der Fall ist, wird True zurückgegeben, wenn die Zeiten weniger als die vorherige Zeile sind, die auftritt, weil die hour Komponente alsbleibt 0, nennen wir cumsum() dazu:

In [178]: 
(df['datetime'] < df['datetime'].shift()).cumsum() 

Out[178]: 
0  0 
1  0 
2  0 
3  0 
4  0 
5  0 
6  0 
7  1 
8  1 
9  1 
10 1 
11 1 
12 1 
13 2 
14 2 
15 2 
Name: datetime, dtype: int32 

Wir dies dann ein TimedeltaIndex zu erzeugen verwenden, um ein Series von Stunden zu jeder Datumzeit hinzufügen

Verwandte Themen