从标签为元组的pandas系列中进行选择

时间:2017-10-27 11:08:57

标签: python pandas

我试图执行以下操作:

In [11]: import itertools

In [12]: states = itertools.product(range(2), range(3))

In [13]: s = pd.Series(np.zeros(6), index=states)

In [14]: s.at[(0, 0)]

其中pdnp分别为pandasnumpy。但是,这会导致

  

ValueError:在非整数索引的基础索引上只能有非整数索引器

我无法从http://pandas.pydata.org/pandas-docs/version/0.15.0/indexing.html中弄清楚这有什么问题;据我了解,.at在选择单个值时相当于.loc,此处我将元组(0, 0)作为索引传递。我怎样才能让它发挥作用? (我更喜欢使用pandas'优化方法at / loc代替__getitem__方法。

2 个答案:

答案 0 :(得分:3)

在我看来,最好使用MultiIndex并按loc选择:

import itertools
states = list(itertools.product(range(2), range(3)))
s = pd.Series(range(6), index=pd.MultiIndex.from_tuples(states))

print (s)
0  0    0
   1    1
   2    2
1  0    3
   1    4
   2    5
dtype: int32

print (s.loc[(0, 0)])
0

编辑:

使用MultiIndex.from_product的OP通过更好的解决方案:

s = pd.Series(range(6), index=pd.MultiIndex.from_product([range(2), range(3)]))
print (s)
0  0    0
   1    1
   2    2
1  0    3
   1    4
   2    5
dtype: int32

答案 1 :(得分:2)

脏黑客:

In [43]: s.loc[[(0,0)]].iat[0]
Out[43]: 0.0