如何初始化多索引,以便我们可以附加值?

2024-09-30 08:32:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在代码的开头初始化了一个多索引。 不同的功能有助于填充它

其中一个(在代码的另一个位置)从头开始初始化它。 为此,我基本上创建了一个新的数据帧,但重新使用了我在代码开头初始化的数据帧的形状

所以代码运行不正常,它看起来是这样的:

# 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'])

谢谢你的帮助


Tags: columns代码dataframeindexnamessummaryperiodfirst
1条回答
网友
1楼 · 发布于 2024-09-30 08:32:00
import pandas as pd
# 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 = index_label,
                       columns = summary.columns)
summary.index.names = ['CDE','Period']

相关问题 更多 >

    热门问题