Как создать настраиваемый мультииндекс с разными заголовками подколонок, используя панд в кадре данных - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть набор данных, который содержит многоиндексные столбцы с первым уровнем, состоящим из года, разделенного на четыре квартала. Как мне структурировать индекс так, чтобы в каждом квартале было 4 набора месяцев?

Я обнаружил следующий фрагмент кода при переполнении стека:

index = pd.MultiIndex.from_product([['S1', 'S2'], ['Start', 'Stop']])
print pd.DataFrame([pd.DataFrame(dic).unstack().values], columns=index)

, который дал следующий вывод:

           S1                      S2            
        Start        Stop       Start        Stop
0  2013-11-12  2013-11-13  2013-11-15  2013-11-17

Однако, это не могло удовлетворить мое требование иметь разные наборы месяцев в каждом квартале года.

Мои данные выглядят так:

                                     2015
              Q1                   Q2              Q3               Q4
Country  jan   Feb   March     Apr May Jun    July Aug Sep     Oct Nov Dec

India    45    54    34        34  45   45    43   45  67      45  56   56
Canada   44    34    12        32  35   45    43   41  60      43  55   21

Я хотел бы ввести такую ​​же структуру набора данных в панды с определенным набором месяцев под каждым кварталом. Как мне поступить об этом?

1 Ответ

0 голосов
/ 09 апреля 2019

Вы также можете создать MultiIndex несколькими другими способами.Одним из них, который полезен, если у вас сложная структура, является ее построение из явного набора кортежей, где каждый кортеж представляет собой один иерархический столбец.Ниже я сначала создаю все нужные вам кортежи в форме (year, quarter, month), создайте из них MultiIndex, а затем назначьте их как столбцы кадра данных.

import pandas as pd

year = 2015
months = [
    ("Jan", "Feb", "Mar"),
    ("Apr", "May", "Jun"),
    ("Jul", "Aug", "Sep"),
    ("Oct", "Nov", "Dec"),
]
tuples = [(year, f"Q{i + 1}", month) for i in range(4) for month in months[i]]
multi_index = pd.MultiIndex.from_tuples(tuples)
data = [
    [45, 54, 34, 34, 45, 45, 43, 45, 67, 45, 56, 56],
    [44, 34, 12, 32, 35, 45, 43, 41, 60, 43, 55, 21],   
]
df = pd.DataFrame(data, index=["India", "Canada"], columns=multi_index)
df
#                                                  2015
#                Q1          Q2          Q3          Q4
#        Jan FebMar Apr May Jun Jul Aug Sep Oct Nov Dec
# India  45  54 34  34  45  45  43  45  67  45  56  56
# Canada 44  34 12  32  35  45  43  41  60  43  55  21
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...