2017-11-22 5 views
0

danach gesucht, aber keine Lösung gefunden - wenn bereits ein sry für die Frage ist, aber ich würde für einen LinkPandas Datenrahmen Resampling über unebene Perioden/min

ich einen Datenrahmen (df) haben dankbar sein, wie folgt aus:

timestamp   value 
2016-03-11 07:37:40 24.6018 
2016-03-11 07:37:45 24.6075 
2016-03-11 07:37:50 24.599 
2016-03-11 07:37:55 24.6047 
2016-03-11 07:38:00 24.5905 
2016-03-11 07:38:05 24.551 
... 

wichtig Start nicht zu einer geraden Minute wie 07:40:00 aber 07:37:40 (könnte jederzeit sein) und ich möchte es neu berechnen - Mittelwerte über zB berechnen 5 Minuten mit dem letzten Zeitstempel der verwendeten Zeilen beschriftet. Gewünschtes Ergebnis mit ersten Zeitstempeln 2016.03.11 07.37.40 von Rohdaten:

2016-03-11 07:42:40 24.608 
2016-03-11 07:47:40 24.605 
2016-03-11 07:52:40 24.59 
... 

ich versuchte

df.resample('5T',how='mean',label='right') 

und

df.resample('300S',how='mean',label='right') 

mit dem gleichen Ergebnis zu verwenden:

es berechnet über volle mi Nute-Perioden. Ich fand keine Möglichkeit, dies richtig zu korrigieren. Sah, dass "Basis" eine Option sein könnte, aber es scheint nicht sehr intuitiv oder schön codiert.

Jede Hilfe wäre willkommen.

Antwort

0

Überprüfen Sie, dass ich Rolling verwendet, die über die angegebene Frequenz rollen und die mathematischen Operationen wie Summe, Mittelwert usw. tun. In diesem müssen Sie die Start- und Ende-Datumswerte kennen.

Code:

df.timestamp=pd.to_datetime(df.timestamp) 
df.set_index('timestamp',inplace=True) 
df = df.rolling('15s').mean() 
mask = pd.date_range('2016-03-11 07:37:40','2016-03-11 07:38:05',freq='10S') 
df = df.loc[mask] 
df 

         value 
2016-03-11 07:37:40 24.601800 
2016-03-11 07:37:50 24.602767 
2016-03-11 07:38:00 24.598067 

Verwenden Sie Ihre gewünschten Fenster anstelle von ‚15s‘ sowie date_range in rollen, die ich used.Let ich weiß, dass dies für Sie arbeitet.

+1

Vielen Dank. Für mich geht das. Ich werde dies tun, aber in der Zwischenzeit habe ich einen Weg gefunden, um 'Basis' für 'resample' zu berechnen, wenn jemand es braucht: 'base = df.iloc [0] .name.minute% 5 + df.iloc [0 ] .name.second' – neo

+0

@neo Sie sind herzlich willkommen. Akzeptieren Sie die Lösung, wenn es für Sie funktioniert. –

Verwandte Themen