使用多索引创建空的熊猫数据框

时间:2021-05-26 11:38:51

标签: pandas dataframe python-2.7 multi-index

我正在尝试使用多索引创建一个空的 pandas.Dataframe,稍后我可以用我的数据按列填充。我查看了其他答案(herehere),但它们都适用于未按列填充或以某种方式连接到不同列中的数据。

我希望包含在多索引中的信息如下所示:

GCM_list = ['BCC-CSM2-MR', 'CAMS-CSM1-0', 'CESM2', 'CESM2-WACCM', 'CMCC-CM2-SR5', 'EC-Earth3', 'EC-Earth3-Veg', 'FGOALS-f3-L', 'GFDL-ESM4', 'INM-CM4-8', 'INM-CM5-0', 'MPI-ESM1-2-HR', 'MRI-ESM2-0', 'NorESM2-MM', 'TaiESM1']
SSP_list = ['SSP_126', 'SSP_245', 'SSP_370', 'SSP_585']
index_years = [2030, 2040, 2050, 2060, 2070, 2080, 2090, 2100]

我希望它看起来有点像这样(对于 GCM_list 中的前三个项目):

               BCC-CSM2-MR                               CAMS-CSM1-0                                CESM2
     SSP_126  SSP_245  SSP_370  SSP_585      SSP_126  SSP_245  SSP_370  SSP_585       SSP_126  SSP_245  SSP_370  SSP_585
2030    |        |
2040    |        |
2050    V        V
2060    1        2
2070
2080
2090
2100

前两列中的“箭头”应该表示在创建索引后我想如何以及以什么顺序填充数据框 - 如果这对这个问题很重要。

我尝试过像这样构建索引,但我不确定结果如何。我应该如何进行?有没有办法构建这个空数据框,以便我可以一列又一列地填充它?

arrays = [GCM_list, SSP_list]
index = pd.MultiIndex.from_arrays(arrays, names=('GCM', 'SSP'))
>>> index
MultiIndex(levels=[[u'BCC-CSM2-MR', u'CAMS-CSM1-0', u'CESM2', u'CESM2-WACCM', u'CMCC-CM2-SR5', u'EC-Earth3', u'EC-Earth3-Veg', u'FGOALS-f3-L', u'GFDL-ESM4', u'INM-CM4-8', u'INM-CM5-0', u'MPI-ESM1-2-HR', u'MRI-ESM2-0', u'NorESM2-MM', u'TaiESM1'], [u'SSP_126', u'SSP_245', u'SSP_370', u'SSP_585']],
           labels=[[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14], [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]],
           names=[u'GCM', u'SSP'])

1 个答案:

答案 0 :(得分:1)

使用MultiIndex.from_product

arrays = [GCM_list, SSP_list]
mux = pd.MultiIndex.from_product(arrays, names=('GCM', 'SSP'))

df = pd.DataFrame(columns=mux, index=index_years)