我有一个多索引的系列:
import numpy as np
import pandas as pd
buckets = np.repeat(['a','b','c'], [3,5,1])
sequence = [0,1,5,0,1,2,4,50,0]
s = pd.Series(
np.random.randn(len(sequence)),
index=pd.MultiIndex.from_tuples(zip(buckets, sequence))
)
# In [6]: s
# Out[6]:
# a 0 -1.106047
# 1 1.665214
# 5 0.279190
# b 0 0.326364
# 1 0.900439
# 2 -0.653940
# 4 0.082270
# 50 -0.255482
# c 0 -0.091730
我想得到第二个索引('sequence
')在2到10之间的s['b']值。
对第一个索引进行切片可以很好地工作:
s['a':'b']
# Out[109]:
# bucket value
# a 0 1.828176
# 1 0.160496
# 5 0.401985
# b 0 -1.514268
# 1 -0.973915
# 2 1.285553
# 4 -0.194625
# 5 -0.144112
但在第二个问题上,至少从两个最明显的方面来看是这样的:
1)返回元素1到4,与索引值无关
s['b'][1:10]
# In [61]: s['b'][1:10]
# Out[61]:
# 1 0.900439
# 2 -0.653940
# 4 0.082270
# 50 -0.255482
但是,如果我反转索引,并且第一个索引是整数,第二个索引是字符串,则可以:
In [26]: s
Out[26]:
0 a -0.126299
1 a 1.810928
5 a 0.571873
0 b -0.116108
1 b -0.712184
2 b -1.771264
4 b 0.148961
50 b 0.089683
0 c -0.582578
In [25]: s[0]['a':'b']
Out[25]:
a -0.126299
b -0.116108
我能想到的最好方法是在这种情况下使用“select”。尽管它甚至在文档中说“只有在没有更直接的方法时才应该使用这种方法。”
Indexing and selecting data
作为Robbie-Clarken answers,由于0.14,您可以传递slice in the tuple you pass to loc:
实际上,您可以为每个级别传递一个片段:
注意:切片是包含的。
旧答案:
您还可以使用以下方法执行此操作:
(在单个ix/loc/iloc中执行是一个很好的实践,因为这个版本允许赋值。)
这个答案是在2013年初的introduction of iloc之前写的,也就是位置/整数位置-在这种情况下可能是首选。创建它的原因是为了消除整数索引pandas对象的模糊性,并且更具描述性:“我在位置上切片”。
也就是说,我有点不同意那些文件,即ix是:
不是,最一致的方式是描述你在做什么:
记住zen of python:
从pandas 0.14.0开始,可以通过提供包含slice对象的
.loc
元组来slice multi-indexed objects:相关问题 更多 >
编程相关推荐