如何使用数据框中的熊猫创建具有不同子列标题的自定义多索引

时间:2019-04-09 16:03:27

标签: python pandas dataframe

我有一个数据集,其中包含多索引列,第一级包含一年,分为四个季度。如何构造索引,以便每个季度有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 :(得分:0)

您还可以通过其他几种方式创建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