2017-01-23 4 views
1

У меня есть foundafew связанные вопросы, но никто, кажется, не делает трюк. Мне нужна аналогичная реализация для this, но с каркасной структурой данных панд. Ниже я создаю образцы данных за весь 2016 год, который имеет 366 строк.pandas roll groupby timeseries данные

import pandas as pd 
import numpy as np 
dates=pd.date_range('2016-01-01','2016-12-31')  
random_data=np.random.randn(len(dates)) 
data=pd.DataFrame(random_data,index=dates,columns=['Test']) 

Я хотел бы использовать groupby для получения следующих 5 дней данных каждые 2 дня. Нормальная группа не имеет перекрывающихся тембров; сдача группы в течение 2 дней даст мне 183 (366/2) группы, которые имеют данные за два дня. Включение группы из 5 дней даст мне около 74 (366/5) групп, у которых по 5 дней каждый. Я хотел бы, чтобы 183 группы имели по пять дней.

Извините, если это неясно. Вот что я хочу:

  Test 
2016-02-08 1.073696 
2016-02-09 1.169865 
2016-02-10 1.421454 
2016-02-11 -0.576036 
2016-02-12 -1.066921 

      Test 
2016-02-10 1.421454 
2016-02-11 -0.576036 
2016-02-12 -1.066921 
2016-02-13 2.639681 
2016-02-14 -0.261616 

Это то, что я получаю с data.groupby(pd.TimeGrouper('2d'))

  Test 
2016-02-08 1.073696 
2016-02-09 1.169865 
      Test 
2016-02-10 1.421454 
2016-02-11 -0.576036 
      Test 
2016-02-12 -1.066921 
2016-02-13 2.639681 

Это то, что я получаю с data.groupby(pd.TimeGrouper('5d'))

  Test 
2016-02-08 0.898029 
2016-02-09 -0.905950 
2016-02-10 -0.202483 
2016-02-11 1.073696 
2016-02-12 1.169865 
       Test 
2016-02-13 1.421454 
2016-02-14 -0.576036 
2016-02-15 -1.066921 
2016-02-16 2.639681 
2016-02-17 -0.261616 
+1

Если какой-либо из этих ответов полезны, не стесняйтесь вверх голосовать их, а также @ Psidom отвечают ниже. Если вы думаете, что ищете что-то другое, дайте мне знать, и я открою это. – piRSquared

+0

Спасибо, я пропустил ваш вопрос во время поиска. Есть ли способ добавить больше ключевых слов, таких как «прокат» или «групповой», чтобы ваш вопрос был связан с другими связанными мной? –

+0

Ваш вопрос делает именно это. Вы добавили ключевые слова. Когда люди google для чего-то, что приведет их к этому вопросу, Stackoverflow перенаправляет этот трафик на мой вопрос, потому что я обозначил его как дубликат. Вот почему его нормально задавать дубликаты. Вы задали одинаковый вопрос, но с другой формулировкой. В этом смысле вы помогли улучшить сайт. – piRSquared

ответ

2

Если даты нормальной последовательности с разностью один день, как показывают данные вашего образца, вы можете использовать индекс для подбора строк. Начните с каждых двух строк и выбрать пять строк для каждого выбрать:

[data.iloc[i:(i+5)] for i in range(0, len(data), 2)] 

#[    Test 
# 2016-01-01 0.450173 
# 2016-01-02 -0.496819 
# 2016-01-03 0.270781 
# 2016-01-04 -0.207634 
# 2016-01-05 1.032061,     
#     Test 
# 2016-01-03 0.270781 
# 2016-01-04 -0.207634 
# 2016-01-05 1.032061 
# 2016-01-06 -0.470462 
# 2016-01-07 -1.077634, ...] 
+0

Если вы добавили это на другой пост, я бы тоже проголосовал за него. – piRSquared

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