在python系列的层次索引中,x[1,2]和x[1][2]之间有什么区别?
我有一个系列在python系列的层次索引中,x[1,2]和x[1][2]之间有什么区别?,python,pandas,indexing,hierarchy,Python,Pandas,Indexing,Hierarchy,我有一个系列 x=pd.Series(np.random.random(16),index=[[1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4],['a','b','c','d','a','b','c','d','a','b','c','d','a','b','c','d']]) 看起来是这样的: 1 a -0.068167 b -1.036551 c -0.246619 d 1.318381 2 a -0.119061 b
x=pd.Series(np.random.random(16),index=[[1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4],['a','b','c','d','a','b','c','d','a','b','c','d','a','b','c','d']])
看起来是这样的:
1 a -0.068167
b -1.036551
c -0.246619
d 1.318381
2 a -0.119061
b 0.249653
c 0.819153
d 1.334510
3 a 0.029305
b -0.879798
c 1.081574
d -1.590322
4 a 0.620149
b -2.197523
c 0.927573
d -0.274370
dtype: float64
x[1,'a']和x[1]['a']之间的区别是什么。它给了我同样的答案。我不明白这种内在的差异意味着什么?什么时候我应该使用上述两个索引?这个解释来自,但是我相信类似的事情正在熊猫身上发生(在熊猫体内使用numpy,使用“索引器”提供(可能的)命名索引和基础的基于整数的索引之间的映射) 因此,请注意x[0,2]=x[0][2],尽管第二种情况效率较低,因为在第一个索引之后创建了一个新的临时数组,该索引随后被2索引 以下是你们系列节目的时间安排;第一种方法大约快30倍:
In [79]: %timeit x[1, 'a']
100000 loops, best of 3: 8.46 µs per loop
In [80]: %timeit x[1]['a']
1000 loops, best of 3: 274 µs per loop
在
x[1,'a']
的情况下,熊猫将1,'a'
作为元组(1,'a')
,并返回与(1,'a')
索引标签相对应的序列值
在
x[1]['a']
的情况下,pandas发现您在[]
中传递的不是一个元组,它可以在元组中引用它的索引,因此最后发现它可能是对第一级元素的引用x[1]
然后返回x
的横截面,在该横截面上我们尝试使用['a']
什么库提供此系列
对象?Pandas库这与numpy无关,是Pandas特有的,因为这是一个多索引;请更新答案,以免misinform@jeff我不会说这和numpy无关?!对于NumPy阵列,x[1]
将是一个视图,性能差异将大大降低。我认为,要正确回答这个问题,需要对索引的作用有更具体的了解。