使用单个索引的数据帧,我可以执行以下操作:
df2 = DataFrame(data={'data': [1,2,3]},
index=Index([dt(2016,1,1),
dt(2016,1,2),
dt(2016,2,1)]))
>>> df2['2016-01 : '2016-01']
data
2016-01-01 1
2016-01-02 2
>>> df2['2016-01-01' : '2016-01-01']
data
2016-01-01 1
当您提供完整的日期(即2016-01-01)时,日期时间切片起作用;当您只提供年份和月份(2016-01)时,也同样适用。所有这些都很好用,但是当您引入多索引时,它仅适用于完整日期。部分日期切片似乎不再起作用。df = DataFrame(data={'data': [1, 2, 3]},
index=MultiIndex.from_tuples([(dt(2016, 1, 1), 2),
(dt(2016, 1, 1), 3),
(dt(2016, 1, 2), 2)],
names=['date', 'val']))
>>> df['2016-01-01 : '2016-01-02']
data
date val
2016-01-01 2 1
3 2
2016-01-02 2 3
好的,没问题,但是部分日期:
>>> df['2016-01' : '2016-01']
File "pandas/index.pyx", line 134, in pandas.index.IndexEngine.get_loc (pandas/index.c:3824)
File "pandas/index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas/index.c:3704)
File "pandas/hashtable.pyx", line 686, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12280)
File "pandas/hashtable.pyx", line 694, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12231)
KeyError: '2016-01'
(我缩短了traceback的长度)。
你知道这是否可能?这是一个错误吗?有没有办法在不使用类似于以下方式的方法的情况下完成我想做的事情:
df.loc[(df.index.get_level_values('date') >= start_date) &
(df.index.get_level_values('date') <= end_date)]
非常感谢任何提示、评论、建议等!我已经尝试了很多其他方法,但都没有成功!
0.18.0
中它不起作用,但在版本0.18.1
中可以实现 - 请参见。 - jezrael