Панды, трансформирующие строки, имеющие одинаковое значение индекса даты и времени - PullRequest
0 голосов
/ 22 ноября 2018

В настоящее время я работаю с фреймом данных, состоящим из нескольких миллионов строк и 8 столбцов, и пытаюсь избежать использования циклов при выполнении преобразований для этого df.

Проблема заключается в следующем.

Пример формата оригинального кадра данных Pandas показан ниже.Здесь «index» - это дата и время, «Room» - категориальное, а остальные столбцы - числа с плавающей запятой.

Оригинал df:

original df

Thisданные датчика в одном кадре данных, где имеется несколько выборок на значение индекса даты / времени, поскольку имеется несколько комнат.Целевой столбец должен иметь следующий формат.

target shape

Обратите внимание, что я пропустил колонки для «кухни и гостиной».Вы, вероятно, получите цель.Один столбец на переменную, на ярлык комнаты.

Теперь, чтобы сделать вещи более сложными.На каждом временном шаге видны не все возможные категории номеров.Например, в 20:05 «кухня» может отсутствовать в примере df.

Можно было бы увидеть это преобразование (я полагаю) в виде нескольких фреймов данных (по одному на каждую комнату), объединенных в один и тот же индекс даты и времени, где имя каждого столбца меняется на sensor__room_category.Может ли это преобразование быть выполнено без использования циклов и итераций по всему df?Если да, то как?

Другое дело, на самом деле этот df состоит из приведенных выше данных из нескольких домов.Таким образом, есть столбец с метками «house_1, house_2, house_3, ...».Таким образом, должна быть преобразована только дата, например, из house_1, затем house_2 и т. Д. Таким образом, данные по каждому дому остаются разделенными.

Я понял, что это довольно специфический вопрос.Но мне интересно, есть ли какая-нибудь панда или даже магия нп, которая делает легко выполнимой

TLDR: данные от датчиков в разных комнатах необходимо преобразовать, поэтому для каждого значения указывается одна временная метка sensor__room_category.Как это сделать без массивных петель?

1 Ответ

0 голосов
/ 23 ноября 2018

Вот пример

давайте предположим, что этот мультииндексированный фрейм данных с датой и временем в качестве индекса:

                         co2 humidity presence  room
index            house              
22/11/2018 20:00 house1 102    60        0  bedroom1
                 house1 104    62        0  bedroom2
                 house1 122    71        1  kitchen
                 house1 115    61        1  living room
22/11/2018 20:05 house1 103    64        0  bedroom1
                 house1 104    68        0  bedroom2
                 house1 123    72        1  kitchen
                 house1 111    63        1  livingroom
22/11/2018 20:00 House2 102    60        0  bedroom1
                 House2 104    62        0  bedroom2
                 House2 122    71        1  kitchen
                 House2 115    61        1  living room
22/11/2018 20:05 House2 103    64        0  bedroom1
                 House2 104    68        0  bedroom2
                 House2 123    72        1  kitchen
                 House2 111    63        1  livingroom

вы можете просто сделать df.pivot(columns='room'):

                         co2                                humidity                                    presence
                  room  bedroom1    bedroom2    kitchen living room bedroom1    bedroom2    kitchen living room bedroom1    bedroom2    kitchen living room
index             house                                             
22/11/2018 20:00  House2    102       104        122         115        60          62          71      61          0           0           1       1
                  house1    102       104        122         115        60          62          71      61          0           0           1       1
22/11/2018 20:05  House2    103       104        123         111        64          68          72      63          0           0           1       1
                  house1    103       104        123         111        64          68          72      63          0           0           1       1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...