2013-10-02 4 views
3

У меня есть временной ряд с нерегулярной выборкой и хотел бы использовать функцию, например, pandas.stats.moments.rolling_sum.roll_sum для нерегулярных временных рядов в пандах?

К сожалению, это похоже, что функция возвращает только «x» образцы, а не «x» секунд.

Не знаете, как обойти это ... довольно новое для панд.

Мои данные выглядит

time  value 
0.000 0.0000 
0.013 0.0134 
0.023 0.0256 
0.035 0.0423 
0.049 0.0756 
0.069 0.0998 
+0

это timedelta times ?, float-like times, или фактическое время (datelike)? – Jeff

+0

время дельта, начиная с нуля. Я использую панды для анализа данных для физического тестирования. – Chris

+0

ok ... ниже, поскольку мы не предлагаем поддержку timedelta для этого банкомата. Вы могли бы также сделать это с группой, но я думаю, будет медленнее. – Jeff

ответ

2

Вот способ сделать то, что я думаю, что вы хотите

In [34]: df = read_csv(StringIO(data),sep='\s+') 

Создать datelike-индекс (подразумевается, что вы имеете в виду секунд здесь, нужно преобразовать в нс для добавления к дате)

In [35]: df['time'] = pd.to_datetime([Timestamp('20130101').value + v*1e9 for v in df['time'] ]) 

In [36]: df.set_index('time',inplace=True) 

In [37]: df 
Out[37]: 
          value 
time        
2013-01-01 00:00:00   0.0000 
2013-01-01 00:00:00.012999 0.0134 
2013-01-01 00:00:00.023000 0.0256 
2013-01-01 00:00:00.035000 0.0423 
2013-01-01 00:00:00.048999 0.0756 
2013-01-01 00:00:00.068999 0.0998 

Соответствует результатам до 20 мс, прокатывая 20 периодов без минимума

In [38]: pd.rolling_sum(df,20,0,freq='20ms') 
Out[38]: 
           value 
time        
2013-01-01 00:00:00   0.00670 
2013-01-01 00:00:00.020000 0.04065 
2013-01-01 00:00:00.040000 0.11625 
2013-01-01 00:00:00.060000 0.21605 
+3

Почему это принято? Это не скользящая сумма с нерегулярными временами. – cronos

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