我正在代码的开头初始化多索引。不同的功能有助于填充它。
其中一个(在代码的另一个位置)从头开始对其进行初始化。为此,我基本上是在创建一个新的DataFrame,但是重新使用我在代码开始时已初始化的形状。
所以代码运行不正常,看起来像这样:
# Beginning of the code, initialization of `summary`.
c_array = [['Index', 'Index'],['First', 'Last']]
cmidx = pd.MultiIndex.from_arrays(c_array)
rmidx = pd.MultiIndex(levels=[[],[]],
codes=[[],[]],
names=['CDE','Period'])
summary = pd.DataFrame(index=rmidx, columns=cmidx)
# Function that re-initializes `summary`,
# keeping its original shape, columns name, and so on...
# New labels
index_label = [('a','b'),('c','d')]
# New values
values = [[20,30],[40,50]]
# New `summary`
summary = pd.DataFrame(values,
index = summary.index.reindex(index_labels),
columns = summary.columns)
摘要
Index First Last ((a, b), (c, d)) 20 30 (-1, -1) 40 50
我希望保留名称,并将(c, d)
作为第二行的标签,即:
Index CDE Period First Last a b 20 30 c d 40 50
[请,有人知道我在做什么错吗?感谢您的帮助,最好!
编辑
我第一次初始化多索引的方式似乎出了问题。
一种有效的方法(但是它迫使我重新创建一个多索引,并具有级别的名称)
rmidx = pd.MultiIndex.from_tuples(index_label, names=['CDE', 'Period'])
summary = pd.DataFrame(values, index = rmidx,
columns = summary.columns)
>>> Index
First Last
CDE Period
a b 20 30
c d 40 50
在这种情况下,
summary.index
>>> MultiIndex([('a', 'b'),
('c', 'd')],
names=['CDE', 'Period'])
感谢您的帮助!