我尝试了以下代码段。
In [84]:
from datetime import datetime
from dateutil.parser import parse
rng = [datetime(2017,1,13), datetime(2017,1,14), datetime(2017,2,15), datetime(2017,2,16)]
s = Series([1,2,3,4], index=rng)
s['2017/1']
Out[84]:
2017-01-13 1
2017-01-14 2
dtype: int64
正如我所预料的那样,我只能通过指定最多为JAN的项目来成功检索属于JAN的项目[' 2017/1']。
下次,我尝试了上面代码的一些扩展版本,其中使用了分层索引:
from datetime import datetime
from dateutil.parser import parse
rng1 = [datetime(2017,1,1), datetime(2017,1,1), datetime(2017,2,1), datetime(2017,2,1)]
rng2 = [datetime(2017,1,13), datetime(2017,1,14), datetime(2017,2,15), datetime(2017,2,16)]
midx = pd.MultiIndex.from_arrays([rng1, rng2])
s = Series([1,2,3,4], index=midx)
s['2017/1']
但是,上面的代码段会生成错误: TypeError:unorderable类型:int()>切片()
你会给我一些帮助吗?答案 0 :(得分:1)
似乎更复杂。
Partial string indexing on datetimeindex when part of a multiindex
已在DataFrame
pandas 0.18.
中实施
所以如果使用:
rng1 = [pd.Timestamp(2017,5,1), pd.Timestamp(2017,5,1),
pd.Timestamp(2017,6,1), pd.Timestamp(2017,6,1)]
rng2 = pd.date_range('2017-01-13', periods=2).tolist() +
pd.date_range('2017-02-15', periods=2).tolist()
s = pd.Series([1,2,3,4], index=[rng1, rng2])
print (s)
2017-05-01 2017-01-13 1
2017-01-14 2
2017-06-01 2017-02-15 3
2017-02-16 4
然后对我来说工作:
print (s.to_frame().loc[pd.IndexSlice[:, '2017/1'],:].squeeze())
2017-05-01 2017-01-13 1
2017-01-14 2
Name: 0, dtype: int64
print (s.loc['2017/6'])
2017-06-01 2017-02-15 3
2017-02-16 4
dtype: int64
但这会返回空Series
:
print (s.loc[pd.IndexSlice[:, '2017/2']])
Series([], dtype: int64