在多索引的第一级中查询 pandas 具有整数的数据帧
query pandas dataframe with integer in first level of multiindex
如果第一个索引是整数,我在使用 pandas MultiIndex 时遇到问题。
我找不到这个问题,所以也许我在这里做错了什么?
我使用 pandas 版本 '0.16.2'
示例:
在:
data2 = pd.DataFrame(np.random.rand(10),
index = [['a','a','a','a','b','b','b','b','c','c'],
[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0]])
data2.ix[['b','c']]
输出:
0
b 5 0.295579
6 0.691801
7 0.386504
8 0.602777
c 9 0.269147
0 0.029509
但是对于第一个索引级别的整数,它似乎不起作用:
data = pd.DataFrame(np.random.rand(10),
index = [[ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3],
['a','b','c','d','e','f','g','h','i','j']])
data.ix[[2,3]]
输出:
0
1 c 0.437728
d 0.785359
使用loc
代替ix
:
data = pd.DataFrame(np.random.rand(10),
index = [[ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3],
['a','b','c','d','e','f','g','h','i','j']])
data.loc[[2,3]]
In [264]: data.loc[[2,3]]
Out[264]:
0
2 e 0.846643
f 0.200234
g 0.298223
h 0.766459
3 i 0.860181
j 0.980182
对于 ix,奇怪的是为什么它不起作用,因为来自 docs:
However, when an axis is integer based, ONLY label based access and not positional access is supported
Thus, in such cases, it’s usually better to be explicit and use .iloc or .loc.
您的索引值是整数,因此应将它们作为标签进行分析:
In [271]: data.index.levels[0]
Out[271]: Int64Index([1, 2, 3], dtype='int64')
但他们建议在这种情况下使用 loc
以更加明确。
如果第一个索引是整数,我在使用 pandas MultiIndex 时遇到问题。 我找不到这个问题,所以也许我在这里做错了什么?
我使用 pandas 版本 '0.16.2'
示例:
在:
data2 = pd.DataFrame(np.random.rand(10),
index = [['a','a','a','a','b','b','b','b','c','c'],
[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0]])
data2.ix[['b','c']]
输出:
0
b 5 0.295579
6 0.691801
7 0.386504
8 0.602777
c 9 0.269147
0 0.029509
但是对于第一个索引级别的整数,它似乎不起作用:
data = pd.DataFrame(np.random.rand(10),
index = [[ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3],
['a','b','c','d','e','f','g','h','i','j']])
data.ix[[2,3]]
输出:
0
1 c 0.437728
d 0.785359
使用loc
代替ix
:
data = pd.DataFrame(np.random.rand(10),
index = [[ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3],
['a','b','c','d','e','f','g','h','i','j']])
data.loc[[2,3]]
In [264]: data.loc[[2,3]]
Out[264]:
0
2 e 0.846643
f 0.200234
g 0.298223
h 0.766459
3 i 0.860181
j 0.980182
对于 ix,奇怪的是为什么它不起作用,因为来自 docs:
However, when an axis is integer based, ONLY label based access and not positional access is supported Thus, in such cases, it’s usually better to be explicit and use .iloc or .loc.
您的索引值是整数,因此应将它们作为标签进行分析:
In [271]: data.index.levels[0]
Out[271]: Int64Index([1, 2, 3], dtype='int64')
但他们建议在这种情况下使用 loc
以更加明确。