2016-11-04 2 views
2

У меня есть Numpy массив, содержащий дату (как объект DateTime), цены и категории, как целое:индексация на объект даты и времени в пределах Numpy массива

array([[datetime.date(2013, 6, 5), 11.42, 1], 
    [datetime.date(2013, 6, 7), 63.97, 1], 
    [datetime.date(2013, 6, 19), 3.92, 1], 
    [datetime.date(2013, 6, 19), 16.25, 2], 
    [datetime.date(2013, 6, 20), 11.0, 2], 
    [datetime.date(2013, 6, 22), 32.72, 2], 
    [datetime.date(2013, 6, 25), 16.6, 3], 
    [datetime.date(2013, 6, 26), 2.95, 2], 
    [datetime.date(2013, 7, 1), 6.27, 1], 
    [datetime.date(2013, 7, 1), 2.95, 1]], dtype=object) 

Подводя итог цены, если категория выполняется с помощью index_cat=(array==2).any(axis=1) , а затем np.sum(array[index_cat][:,1]) очевидна.

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

Так что я думал, что index_june=(array==datetime.dateime(month='06').any(axis=1) должен это сделать, но даже с большим количеством поисков я не смог найти способ сделать это.

Итак, как это выразить, чтобы соответствовать объекту datetime, учитывая отсутствие подстановочных знаков?

Большое спасибо!

ответ

1

Вы можете использовать функцию векторизации Numpy в:

getmonth = np.vectorize(lambda d: getattr(d, "month")) 
ind = getmonth(arr[:,0]) == 11 

другой путь список понимание:

ind = np.array([a[0].month == 11 for a in arr]) 
+0

Отлично! Спасибо за быстрый и ясный ответ! Я предпочитаю способ понимания списка, поскольку он лучше подходит для моего знания python (на данный момент). – nick

+0

Он также выглядит немного быстрее. – dnalow

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