多索引熊猫系列中的set_codes

时间:2019-07-18 10:26:09

标签: python pandas datetime indexing multi-index

我想对数据数组进行多索引。 最初,我使用日期时间索引我的数据,但是对于某些更高版本的应用程序,我不得不添加另一个数字索引(从len(array)-1的0开始)。

我已经写了几行:

O = [0.701733664614, 0.699495411782, 0.572129320819, 0.613315597684, 0.58079660603, 0.596638918579, 0.48453382119]
Ab = [datetime.datetime(2018, 12, 11, 14, 0), datetime.datetime(2018, 12, 21, 10, 0), datetime.datetime(2018, 12, 21, 14, 0), datetime.datetime(2019, 1, 1, 10, 0), datetime.datetime(2019, 1, 1, 14, 0), datetime.datetime(2019, 1, 11, 10, 0), datetime.datetime(2019, 1, 11, 14, 0)]
tst = pd.Series(O,index=Ab)
ld = len(tst)
index = pd.MultiIndex.from_product([(x for x in range(0,ld)),Ab], names=['id','dtime'])
print (index)
data = pd.Series(O,index=index)

但是当打印 index 时,我得到一些奇怪的“代码”: 级别和名称是完美的,但是代码从0到763 ... 764次(而不是1次)!

我尝试添加 set_codes 命令:

index.set_codes([x for x in range(0,ld)], level=0)
print (index)

我自负,有以下错误:

  
    

ValueError:不相等的代码长度:[764,583696]

  

最初的熊猫系列:

打印(tst)

2005-01-01 14:00:00 0.544177

2005-01-01 14:00:00 0.544177

2005-01-21 14:00:00 0.602239

...

2019-05-21 10:00:00 0.446813

2019-05-21 14:00:00 0.466573

长度:764,dtype:float64

新的预期目标

id dtime

0 2005-01-01 14:00:00 0.544177

1 2005-01-01 14:00:00 0.544177

2 2005-01-21 14:00:00 0.602239

...

762 2019-05-21 10:00:00 0.446813

763 2019-05-21 14:00:00 0.466573

预先感谢

1 个答案:

答案 0 :(得分:1)

您可以通过MultiIndex.from_arrays创建新索引,然后重新分配给Series

s.index = pd.MultiIndex.from_arrays([np.arange(len(s)), s.index], names=['id','dtime'])