Pandas Dataframe multiindex - PullRequest
       11

Pandas Dataframe multiindex

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

Я новичок в Python, Pandas, Dash и т. Д. Я пытаюсь структурировать фрейм данных, чтобы я мог создать некоторые компоненты dash для построения графиков, которые позволят пользователю просматривать и фильтровать данные.

В верхней части находятся агрегационные характеристики, первые 3 являются обязательными, а остальные - разреженными в зависимости от того, были ли данные агрегированы для этой характеристики. После первых эллипсов существуют некоторые итоговые характеристики для дня, а после вторых эллипсов - данные временных рядов для агрегации. В этом примере насчитывается около 3800 предварительно рассчитанных групп агрегатов.

Стоит ли пытаться преобразовать совокупные характеристики в MultiIndex?

Runid - это идентификатор прогона анализа, который создал выходные данные (тот же номер для всех 3818 столбцов), в то время как поле UID должно быть уникальным для каждого столбца одного прогона, но несколько прогонов будут иметь один и тот же UID с разными RUNIDs. UID - это уникальная комбинация CHAR1-CHAR20 для этого RUNID и AGGLEVEL. AGGLEVEL - это группа анализа, которая может иметь один или несколько столбцов вывода. CHAR3_CHAR6_UNADJ - это уникальные комбинации CHAR3 и CHAR6, поэтому эти две строки заполняются, в то время как остальные строки CHAR равны нулю (хорошо NaN). Мой текущий пример - только один прогон, но есть десятки тысяч прогонов, хотя я обычно сосредотачиваюсь на одном в время и, вероятно, не будет иметь дело с более чем 10-20 за один раз для подмножества данных каждого. От Char1 до Char20 заполняются, только если в этом столбце есть данные, агрегированные по этой характеристике.

Пример моего фрейма данных:

print(dft)
                           0      ...                 3818
UID                          32   ...                19980
RUNID                      1234   ...                 1234
AGGLEVEL             CHAR12_ADJ   ...    CHAR3_CHAR6_UNADJ
CHAR1                       NaN   ...                  NaN
CHAR2                       NaN   ...                  NaN
CHAR3                       NaN   ...                 1234
CHAR4                       NaN   ...                  NaN
CHAR5                       NaN   ...                  NaN
CHAR6                       NaN   ...                 ABCD
CHAR7                       NaN   ...                  NaN
CHAR8                       NaN   ...                  NaN
CHAR9                       NaN   ...                  NaN
CHAR10                      NaN   ...                  NaN
CHAR11                      NaN   ...                  NaN
CHAR12                     IJKL   ...                  NaN
CHAR13                      NaN   ...                  NaN
CHAR14                      NaN   ...                  NaN
CHAR15                      NaN   ...                  NaN
CHAR16                      NaN   ...                  NaN
CHAR17                      NaN   ...                  NaN
CHAR18                      NaN   ...                  NaN
CHAR19                      NaN   ...                  NaN
CHAR20                      NaN   ...                  NaN
...
STARTTIME   2018-08-22 00:00:00   ...  2018-08-22 00:00:00
MAXIMUM                   2.676   ...             0.654993
MINIMUM                  0.8868   ...             0.258181
...
00:00                    1.2288   ...             0.335217
01:00                    1.2828   ...             0.337848
02:00                    1.2876   ...             0.324639
03:00                     1.194   ...             0.314569
04:00                    1.2876   ...             0.258181
05:00                    1.1256   ...             0.284699
06:00                    1.4016   ...             0.364655
07:00                     1.122   ...             0.388968
08:00                    1.0188   ...             0.452711
09:00                     1.008   ...             0.507032
10:00                    1.0272   ...             0.546807
11:00                     0.972   ...             0.605359
12:00                     1.062   ...             0.641152
13:00                    0.8868   ...             0.625082
14:00                    1.1076   ...             0.623865
15:00                    0.9528   ...             0.654993
16:00                     1.014   ...             0.645511
17:00                     2.676   ...              0.62638
18:00                    0.9888   ...             0.551629
19:00                     1.038   ...             0.518322
20:00                    1.2528   ...              0.50793
21:00                      1.08   ...             0.456993
22:00                    1.1724   ...             0.387063
23:00                    1.1736   ...             0.345045

[62 rows x 3819 columns]

1 Ответ

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

Вы должны попытаться транспонировать его с помощью dft.T.В качестве индекса у вас будет номер вашего образца от 0 до 3818, и вам будет легче выбрать ваши столбцы, например, с помощью dft['STARTTIME'].

Для NaN вы должны сделать dft = dft.replace('NaN',np.nan), чтобыПанды поймут, что это действительно NaN, а не строка (не забудьте написать import numpy as np раньше).После этого вы сможете использовать pd.isna(dft), чтобы проверить, есть ли в вашем датафрейме NaN, или dft.dropna(), чтобы сохранить полные заполненные строки.

...