2016-09-23 2 views
2

Ich benutze Pandas, um Daten zu strukturieren und zu verarbeiten. Das ist mein Datenrahmen:Gruppe DataFrame nach Zeitraum mit Aggregation

enter image description here

ich viel Datetimes von Minute gruppierte, und ich habe eine Aggregation, um die Summe von ‚Bitrate‘ Noten von Minute zu haben. Dies war mein Code, um diesen Datenrahmen zu haben:

def aggregate_data(data): 

    def delete_seconds(time): 

     return (datetime.datetime.strptime(time, '%Y-%m-%d %H:%M:%S')).replace(second=0) 


    data['new_time'] = data['beginning_time'].apply(delete_seconds) 
    df = (data[['new_time', 'bitrate']].groupby(['new_time'])).aggregate(np.sum) 

    return df 

Jetzt mag ich mit 5 Minuten als Eimer eine ähnliche Sache zu tun. Ich wand meine Datetimes Gruppe von 5 Minuten zu tun und eine mittlere .. Etwas wie folgt aus: (Diese dosent Arbeit natürlich!)

df.groupby([df.index.map(lambda t: t.5minute)]).aggregate(np.mean) 

Ideen? Danke !

+0

wenn Ihr Index ist bereits ein datetimeIndex dann können Sie nur 'resample' benutzen.' Df.resample ('5min') bedeuten() 'sollte – EdChum

Antwort

4

resample verwenden.

df.resample('5Min').sum()

Dies setzt voraus, Ihr Index korrekt als DateTimeIndex gesetzt.

Sie können auch den TimeGroup verwenden, da das Resampling wirklich nur eine Groupby-Operation auf Zeit-Buckets ist.

df.groupby(pd.TimeGrouper('5Min')).sum()

+0

arbeiten Kann mir helfen, dies zu tun? http://stackoverflow.com/questions/39691671/resampling-timeseries-with-a-given-timedelta – DataAddicted

Verwandte Themen