2017-01-25 2 views
1

у меня есть данные TimeSeries, которые выглядят так:как взять среднее значение за три дня в таймсерий данных

datetime | value 
2016-01-01 | 1 
2016-01-02 | 14 
2016-01-03 | 3 
2016-01-04 | 15 
2016-01-05 | 5 
2016-01-06 | 4 
2016-01-07 | 7 
2016-01-08 | 15 

То, что я хочу, чтобы получить среднее за три дня (а а за неделю) и держать в последний день, как индекс, как это:

datetime | value 
2016-01-03 | 6 
2016-01-06 | 8 
2016-01-08 | 11 

Вы можете заметить, что оставшиеся 2 записи должны быть только в среднем. Есть ли удобный способ сделать это либо в pandas dataframe или graphlab SFrame? Если кто-то может поделиться соответствующим ресурсом, это было бы здорово!

Я ценю любую помощь!

ответ

1

Вы можете использовать agg по Numpy массива, созданного деление с:

print (np.arange(len(df.index)) // 3) 
[0 0 0 1 1 1 2 2] 

df = df.groupby(np.arange(len(df.index)) // 3).agg({'datetime': 'last', 'value': 'mean'}) 
print (df) 
    datetime value 
0 2016-01-03  6 
1 2016-01-06  8 
2 2016-01-08  11 
1

Numpy массива поддерживает выбор четного пространства:

>>> import numpy as np 
>>> l = np.arange(10) 
>>> l 
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
>>> l[0::3] 
array([0, 3, 6, 9]) 

Панда Series большую часть время поддержки функцию Numpy. В вашем случае вместо индекса 0 итерация от 0 до 2 в цикле должна выполнять работу.

Смежные вопросы