2015-03-30 4 views
0

У меня есть матрица данных (в numpy), где 0-й столбец содержит даты в формате ГГГ-ММ-ДД ЧЧ: ММ: СС. Мне нужно удалить даты, которые повторяются более одного раза в час.Сравнение двух матриц дат и поиска индекса в python

Я преобразовал столбец даты в объект времени даты, а затем с np.unique я удалил повторяющиеся записи. Но я не могу найти индекс уникального массива для извлечения данных из основной матрицы.

Что я сделал, что

данных является матрица 11X6, в которых 2 элементы повторяют. Мне нужно, чтобы эти два элемента были удалены.

2015-03-28 15: 41: 00,19.17,19.04,90,0.25,31.44 2015-03-28 15: 43: 00,19.17,18.99,90,0.76,31.44 2015-03- 28 16: 10: 00,19.48,19.41,92,0.25,15.68 2015-03-28 16: 13: 00,19.59,19.41,92,0.51,15.68 2015-03-28 17: 00: 00,21.22 , 19,41,87,0,51,37,63 2015-03-28 18: 00: 00,21,66,21,18,79,0,0,23,82 2015-03-28 19: 00: 00,22.04,21.62,77,0.0,21.41 2015-03-28 20: 00: 00,22.05,21.68,77,0.0,13.71 2015-03-28 21: 00: 00,21.83,20.8,81,0.0,4.42-03-28 22: 00: 00,21.06,20.64,81,0.0,4.81 2015-03-28 23: 00: 00,20.78,20.09,82,0.0,14.35

dates=list(np.unique(([dt.datetime.strptime(dt.datetime.strptime(x,'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d %H'),'%Y-%m-%d %H') for x in data[:,0]]))) 

dates1=(([dt.datetime.strptime(dt.datetime.strptime(x,'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d %H'),'%Y-%m-%d %H') for x in data[:,0]])) 

затем

uniq_data=data[np.squeeze(np.array(np.where(np.in1d(dates,dates1))).T),:] 

но это дало первый элемент 9, но он все еще содержит повторяющийся элемент.

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

любая помощь будет очень признательна.

+0

Вы можете использовать datetime.timedelta и удалить любые элементы, расположенные менее чем на один час? Если вы разместите первый столбец массива данных, тогда было бы легче помочь. –

+0

может ли кто-нибудь сказать, как использовать np.in1d, если все элементы первого массива присутствуют во втором массиве? – pkv

ответ

0

Вы можете получить индексы элементов, которые позволят вам получить уникальный массив: numpy.unique(…, return_index=True) - твой друг.

+0

спасибо, что сделал трюк – pkv

+0

В документации тоже есть. :) Я призываю вас всегда проверять, есть ли то, что вы хотите: надеюсь, вы не первый, кому нужна функция, которую вы ищете. :) – EOL

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