Добавить несколько уровней индекса к существующему pandas индексу - PullRequest
0 голосов
/ 19 июня 2020

У меня есть df с обычным индексом datetime. Мне нужно добавить несколько уровней индекса. Каким способом pythoni c добиться этого?

import numpy as np
import pandas as pd

idx = pd.date_range(start="2020-01-01", end="2020-01-10")
vals = {"values": np.random.randint(low=1, high=100, size=10)}
df = pd.DataFrame(data=vals, index=idx)
df.index.name = "time"

Мне нужно добавить, например, два новых уровня индекса. Они должны добавить к текущему уровню индекса «время». Результат должен выглядеть так.

                              values
L0_name  L1_name  time              
L0 value L1 value 2020-01-01      87
                  2020-01-02      46
                  2020-01-03      19
                  2020-01-04      44
                  2020-01-05      94
                  2020-01-06      58
                  2020-01-07      74
                  2020-01-08      32
                  2020-01-09      64
                  2020-01-10      84

1 Ответ

2 голосов
/ 19 июня 2020

Создайте новые столбцы, DataFrame.assign, добавьте к существующему индексу DataFrame.set_index, а затем измените их порядок на DataFrame.reorder_levels:

df1 = (df.assign(L0_name = 'L0 value', L1_name='L1 value')
         .set_index(['L0_name','L1_name'], append=True)
         .reorder_levels([1,2,0]))

Или создайте новый MultiIndex, например, MultiIndex.from_product и перезапишите существующий индекс на DataFrame.set_index:

idx = pd.MultiIndex.from_product([['L0 value'],['L1 value'], df.index], 
                                 names=['L0_name','L1_name','time'])

df1 = df.set_index(idx)

print (df1)
                              values
L0_name  L1_name  time              
L0 value L1 value 2020-01-01      84
                  2020-01-02      31
                  2020-01-03       4
                  2020-01-04      49
                  2020-01-05      77
                  2020-01-06      49
                  2020-01-07      15
                  2020-01-08      24
                  2020-01-09      49
                  2020-01-10      62
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...