2016-09-23 9 views
2

Я использую Pandas для структурирования и обработки данных. Это мой DataFrame:Группа DataFrame по периоду времени с агрегацией

enter image description here

Я сгруппировал много DateTimes от минуты, и я сделал агрегацию, чтобы иметь сумму «битрейт» баллов по минуте. Это был мой код, чтобы это Dataframe:

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 

Теперь я хочу сделать подобную вещь с 5 минут, как из ведра. Я палочки, чтобы сделать группу моих DateTimes на 5 минут и сделать среднее .. Что-то вроде этого: (Эта работа доцент, конечно!)

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

Идеи? Спасибо !

+0

если ваш индекс уже datetimeIndex, то вы можете просто использовать 'resample':.' Df.resample («5мин») означают() 'должны работать – EdChum

ответ

4

использование resample.

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

Это предполагает ваш индекс правильно установлен как DateTimeIndex.

вы также можете использовать TimeGrouper, поскольку передискретизация - это действительно операция сгруппирована по времени.

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

+0

Может у помочь мне сделать это? http://stackoverflow.com/questions/39691671/resampling-timeseries-with-a-given-timedelta – DataAddicted