multiIndex pandas 系列中的 set_codes

Posted

技术标签:

【中文标题】multiIndex pandas 系列中的 set_codes【英文标题】:set_codes in multiIndexed pandas series 【发布时间】:2019-11-27 06:21:44 【问题描述】:

我想对一个数据数组进行多重索引。 最初,我使用 datetime 索引我的数据,但对于后来的一些应用程序,我必须添加另一个数字索引(从 0 到 len(array)-1)。

我已经写了那些小行:

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,数据类型:float64

新的预期

id 时间

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】:

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

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

【讨论】:

只是另一个小问题,如果我想访问特定日期,我该怎么办?例如,我可以访问最后一个值:s[0][0] @Nour - 使用 Series.xs - 例如s.xs('2005-01-01', level=1) 我得到了这个:id 759 0.570497 我的意思是,我怎样才能输入一些 id 并返回一个特定的日期。对不起,我记错了^^' 然后使用print (s.loc[5].index[0]) s.index 中的“s”是什么?这是从哪里来的?

以上是关于multiIndex pandas 系列中的 set_codes的主要内容,如果未能解决你的问题,请参考以下文章

在 Multiindex Pandas 系列中获取每个组中最大的

将 pandas 系列的 numpy 矩阵转换为 Multiindex 系列

Pandas Multiindex 系列级别重新索引

concat和sum multiindex pandas系列

在 pandas MultiIndex 系列中设置值

pandas MultiIndex中的代码有啥用?