Как инициализировать мультииндекс, чтобы мы могли добавлять значения? - PullRequest
0 голосов
/ 01 мая 2020

Я инициализирую мультииндекс в начале моего кода. Различные функции способствуют его заполнению.

Одна из них (в другом месте кода) инициализирует его с нуля. Чтобы сделать это, я в основном создаю новый 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

Пожалуйста, кто-то знает, какую ошибку я совершаю? Я благодарю вас за вашу помощь, Bests!

EDIT

Кажется, что-то не так с тем, как я сначала инициализирую мультииндекс.

Один способ, который работает ( но это вынуждает меня заново создать мультииндекс и иметь названия уровней)

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

Спасибо за любую помощь!

1 Ответ

1 голос
/ 01 мая 2020
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']
...