2013-12-17 3 views
1

В моем коде я сейчас делаю следующий вид операции с пандой:Индекса серия панды на час

ser = oldser.dropna().copy() 
for i in range(24): 
    ind = ser.groupby(ser.index.hour).get_group(i).index 
    ser[ind]=something 

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

То, что я действительно хочу, что-то аналогичное

series['2011'] 

который получает все данные, начиная с 2011 года, но вместо этого

series['2pm'] 

получать все данные в 2pm.

ответ

1

Конечно, вы хотите сделать операцию GroupBy один раз, небольшой рефакторинг:

g = ser.groupby(ser.index.hour) 
for i, ind in g.indices: 
    ser.iloc[ind] = something 

Но, скорее всего, вы можете сделать преобразование или применить (в зависимости от того, что что-то есть):

g.transform(something) 
g.apply(something) 
+0

Спасибо - Рефактор имеет смысл. Не удалось выяснить подход применения преобразования, когда я сначала рассмотрел его. Я надеялся, что есть хороший синтаксический сахар. – thebigdog

+1

@thebigdog вам нужно что-то, чтобы быть функцией для преобразования/применения, стоит проверить документы: http://pandas.pydata.org/pandas-docs/stable/groupby.html –

+0

Это похоже на лучшее решение. У меня есть что-то, что работает сейчас, хотя мне все еще нравится что-то «более чистое ;-)» – thebigdog

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