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 系列