2016-09-23 1 views
2

я могу создать час дня в колонке панд следующим образом:Dataframe колонка показывает полтора часа интервалы

data['hod'] = [r.hour for r in data.index] 

Это позволяет мне легко проверить статистику по моим данным, основываясь на времени суток. Как я могу создать аналогичный столбец, показывающий каждые полчаса?

Пример данные:

     Low High Open hod 
Timestamp    
2014-03-04 09:30:00 1783.50 1786.75 1783.50 9 
2014-03-04 09:45:00 1784.50 1788.75 1784.50 9 
2014-03-04 10:00:00 1785.75 1789.50 1788.25 10 
2014-03-04 10:15:00 1787.75 1789.50 1788.50 10 
2014-03-04 10:30:00 1788.25 1791.25 1789.00 10 
... ... ... ... ... 
2016-06-10 15:00:00 2079.50 2082.00 2082.00 15 
2016-06-10 15:15:00 2079.50 2083.00 2079.75 15 
2016-06-10 15:30:00 2082.50 2084.25 2082.75 15 
2016-06-10 15:45:00 2083.50 2088.25 2083.50 15 
2016-06-10 16:00:00 2085.75 2088.25 2086.25 16 

Желаемый выход.

Я хотел бы новый столбец «hod2» показывая время каждого полчаса следующим образом:

     Low High Open hod2 
Timestamp    
2014-03-04 09:30:00 1783.50 1786.75 1783.50 9:30 
2014-03-04 09:45:00 1784.50 1788.75 1784.50 9:30 
2014-03-04 10:00:00 1785.75 1789.50 1788.25 10:00 
2014-03-04 10:15:00 1787.75 1789.50 1788.50 10:00 
2014-03-04 10:30:00 1788.25 1791.25 1789.00 10:30 
+2

Там нет необходимости использовать понимание: 'данные [ 'HOD'] = data.index.hour' тоже работает, и его легче читать. –

ответ

2

Поскольку ваш индекс является DatetimeIndex, он имеет определенные атрибуты, которые мы можем получить доступ как hour. Другим атрибутом, который может оказаться полезным для вашей задачи, является minute. Что-то вроде этого должно работать для отображения полчаса приращений.

data['hod2'] = ['{0}:{1}'.format(r.hour, '30' if round(float(r.minute)/60) == 1 else '00') for r in data.index] 

EDIT

Гораздо чище версия этого было предложено Alberto Garcia-Raboso в комментариях ниже:

data['hod2'] = ['{}:{:02d}'.format(r.hour, (r.minute//30)*30) for r in data.index] 
+1

Хорошо работает – ade1e

+2

Небольшая вариация: '['{}: {: 02d}'. Format (r.hour, (r.minute // 30) * 30) для r в data.index]' –

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