2015-08-21 1 views
6

Есть временные ряды (ц), индексированные DatatimeIndex, хотите сгруппировать его по 10 минутКак группировать временные ряды на 10 минут с помощью панд?

index x y z 

ts1  .... 
ts2  .... 
... 

Я знаю, как группа 1 минуту

def group_by_minute(timestamp): 
    year = timestamp.year 
    month = timestamp.month 
    day = timestamp.day 
    hour = timestamp.hour 
    minute = timestamp.minute 
    return datetime.datetime(year, month, day, hour, minute) 

затем

ts.groupby(group_by_minute, axis=0) 

моя индивидуальная функция (примерно)

def my_function(group): 
    first_latitude = group['latitude'].sort_index().head(1).values[0] 
    last_longitude = group['longitude'].sort_index().tail(1).values[0] 
    return first_latitude - last_longitude 

поэтому ц DataFrame должен определенно содержит 'широту' и 'долгота' столбцы

При использовании TimeGrouper

ts.groupby(pd.TimeGrouper(freq='100min')).apply(my_function) 

я получил следующие ошибки,

TypeError: cannot concatenate a non-NDFrame object 
+0

Вы пробовали 'resample'? Например. 'df.resample ('1min', 'mean')' Какую агрегацию вы делаете – JoeCondron

+0

@JoeCondron Я применяю настраиваемые функции с помощью функции APPLY. Мне кажется, что resample или TimeGrouper автоматически заполняет этот пробел, даже существует промежуток времени в один год. Есть ли способ предотвратить это? Большое спасибо –

+0

Вы можете передать свою пользовательскую функцию, например: 'df.resample ('10min', how = my_func)'. Он не заполнит пробелы, если вы не сообщите об этом. Возможно, вам следует отправить функцию, которую вы хотите передать, и желаемый результат. В качестве альтернативы вы можете настроить последнюю строку своей функции на «минута = 10 * (минута/10)». – JoeCondron

ответ

10

Существует pandas.TimeGrouper для такого рода вещи, которые вы описали, были бы такими:

agg_10m = df.groupby(pd.TimeGrouper(freq='10Min')).aggregate(numpy.sum) #or other function 
+1

thx для ответа. Кажется, что pd.TimeGrouper существует, но здесь не зарегистрировано http://pandas.pydata.org/pandas-docs/stable/api.html –

+0

oops, вы правы. Никогда не замечайте, что это недокументировано. –

+0

получить «TypeError: не может конкатенировать объект, отличный от NDFrame», применяя TimeGrouper –

2

Я знаю, что это старый, но pd.Grouper() будет также сделать это:

agg_10m = df.groupby(pd.Grouper(freq='10Min')).aggregate(numpy.sum) 
Смежные вопросы