假设我有一个带有MultiIndex的DataFrame,如下所示:
col col col col ...
tstp pkt
2016-04-14 04:05:32.321 0 ... ... ... ...
25 ... ... ... ...
2016-04-14 04:05:32.322 1 ... ... ... ...
26 ... ... ... ...
2016-04-14 04:05:32.374 2 ... ... ... ...
...
确定beg
和end
后,我想使用df[].between_time(beg,end)
从DataFrame中获取相关行。唯一的问题是,.between_time(beg,end)
似乎只适用于DateTimeIndex:
*** TypeError: Index must be DatetimeIndex
或者通过xs()
更适合这样做?
df.xs(slice(beg,end),level='tstp')
答案 0 :(得分:2)
有多种方法可以获得所需的结果:
可能最好使用 DataFrame.loc
直接索引到 MutliIndex
:
df.loc[beg:end]
如果您需要使用between_time
,则可以unstack
索引的第二级,然后使用between_time
,最后使用stack
第二级:
df.unstack().between_time(beg,end).stack()
正如IanS所提到的,xs
会给你一个类似的结果:
df.xs(slice(beg,end),level='tstp')
第一个选项看起来最干净也最快:
>>> timeit df.loc[beg:end]
1000 loops, best of 3: 317 µs per loop
>>> timeit df.unstack().between_time(beg,end).stack()
100 loops, best of 3: 3.35 ms per loop
>>> timeit df.xs(slice(beg,end),level='tstp')
1000 loops, best of 3: 632 µs per loop
示例Jupyter notebook here。