向现有熊猫索引添加多个索引级别



我有一个带有常规日期时间索引的df。我需要添加多个索引级别。实现此目的的pythonic方法是什么?

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

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

最新更新