2016-05-10 12 views
1

Ich habe einen Zeitreihendatenrahmen in Python mit jeder zweiten Frequenz. Ich versuche, die Daten zu aggregieren, um den maximalen Wert von Speed in jeder Minute zu erhalten. Ich verwende diesen Code:Index von resample in Pandas erhalten

df = pd.DataFrame({ 'Speed' : [], 
        'Acceleration' : [] 
      }) 
rng = pd.date_range('1/1/2011', periods=72, freq='s') 
df['Speed'] = np.random.randn(len(rng)) 
df['Acceleration'] = np.random.randn(len(rng)) 
df = df.set_index(rng) 
df['Acceleration'].resample("1Min").max() 

Ich habe jedoch eine andere Spalte Speed und ich bin an den zugehörigen Wert davon auf die maximale Acceleration an jeder Minute zu bekommen. Stellen Sie sich zum Beispiel die höchste Acceleration für 13:15 passiert um 13:15:10 vor und es war 1.2 m/s^2. In der gleichen Sekunde war die Geschwindigkeit 5 m/s. Ich möchte diese Geschwindigkeit zusätzlich zur maximalen Beschleunigung erhalten. Vielen Dank.

Antwort

1

Versuchen Sie dies Ihr eigenes Beispiel mit

In [17]: idx = df.resample('1Min').agg({'Acceleration': np.argmax}) 
In [18]: df.ix[idx.Acceleration] 
Out[18]: 
        Acceleration  Speed 
2011-01-01 00:00:06  2.754047 -0.274572 
2011-01-01 00:01:06  3.258652 -1.302055 
1

Lösung

import datetime as dt 
import numpy as np 
import pandas as pd 

np.random.seed([3, 1415]) 

seconds = pd.date_range('2016-03-01', '2016-03-02', freq='S') 

data = pd.Series(np.random.rand(len(seconds)), index=seconds) 

def minute(x): 
    """Returns a datetime object with seconds stripped off""" 
    fmt = '%Y%m%d%H%M' 
    return dt.datetime.strptime(x.strftime(fmt), fmt) 

data.groupby(minute).agg({'max': np.max, 'argmax': np.argmax}) 

Sie finden diese auf Ihre eigene Situation anwenden müssen.