python 中系列的层次结构索引中的 x[1,2] 和 x[1][2] 有什么区别?

what is the difference between x[1,2] and x[1][2] in hierarchy indexing for series in python?

我有一个系列

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 docs,但是我相信 pandas 中也发生了类似的事情(它在内部使用了 numpy,使用 "indexers" 提供了一个(可能) 命名索引和基于整数的基础索引)。

So note that x[0,2] = x[0][2] though the second case is less efficient as a new temporary array is created after the first index that is subsequently indexed by 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'] 的情况下,pandas 将 1, 'a' 作为元组 (1, 'a') 并返回对应于 (1, 'a') 的系列值索引标签。

x[1]['a'] 的情况下,pandas 正在计算出您在 [] 中传递的内容不是一个可以在其中引用其索引的元组,因此最终得出结论它可能是对第一级元素的引用。 x[1] 然后 returns x 的横截面,我们尝试用 ['a'] 在其上再次切片。