Как заполнить данные временных рядов минут 0 в python? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть набор данных "nodup", как показано ниже (не отсортировано по времени). это подмножество необработанных данных, не отсортированных. Мне нужно получать записи каждые 15 минут, например, 08:15, 08:30, 08:45 ... но они сохраняют записи только при занятости = 1.

Что мне нужно сделать, это получить занятие = 0, и автоматически заполняет связанный вновь сгенерированный СО2 и влажность на основе предыдущего и следующего значений (из того же устройства). :

 device     occupancy                time         co2   humidity 
   1          1              2019-06-27 10:17:22    818     40
   2          1              2019-06-27 10:17:22    818     39
   3          1              2019-06-27 08:00:05    625     40
   4          1              2019-06-27 12:16:53    723     40
  ....
   1          1              2019-06-28 10:17:22    818     40
   2          1              2019-06-28 10:17:22    818     39
   3          1              2019-06-28 08:02:05    625     40
   4          1              2019-06-28 12:16:53    723     40
  ....

В качестве примера (я хочу создать 15-минутные записи на основе предыдущих данных, сортируя по времени):

 device     occupancy                time         co2   humidity 
   1          1              2019-06-27 08:15     818     40
   2          0              2019-06-27 08:15     XXX     XX
   3          0              2019-06-27 08:15     XXX     XX
   4          1              2019-06-27 08:15     723     40
  ....
   1          1              2019-06-27 08:30     830     45
   2          0              2019-06-27 08:30     XXX     XX

Я пробовал

time_first =nodup['time'].min()  
time_last = nodup['time'].max() 

mux = pd.MultiIndex.from_product([pd.date_range(time_first, time_last,freq='15min'), 
nodup['device'].unique()], names=['time', 'device'])

result = nodup.set_index(['time','device']).reindex(mux, fill_value=0).reset_index()

Но он работает так:

ValueError: cannot handle a non-unique multi-index!

Кто-нибудь может помочь в этом? Когда я просматриваю необработанные данные, в строке

нет дубликатов

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Я не знаю, что вы спрашиваете, но я собираюсь ответить, основываясь на названии

(я не понимаю, почему 10:17 станет 8:15, например)

nodup = pandas.DataFrame({
   'time': pandas.date_range('2019-01-03 22:12:13','2019-05-08 11:11:27',periods=1000)
})

чтобы все время имели ": 00" для минут

new_times = nodup['time'].dt.floor("1h")
0 голосов
/ 11 марта 2020

Вы не можете использовать устройство в качестве индекса, потому что это не уникальный индекс!

Индексы должны быть уникальным числом, которое не может повторяться в столбце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...