在MultiIndex上使用between_time()?

时间:2016-04-14 05:21:43

标签: python pandas

假设我有一个带有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    ...  ...  ...  ...
...

确定begend后,我想使用df[].between_time(beg,end)从DataFrame中获取相关行。唯一的问题是,.between_time(beg,end)似乎只适用于DateTimeIndex:

*** TypeError: Index must be DatetimeIndex

或者通过xs()更适合这样做?

df.xs(slice(beg,end),level='tstp')

1 个答案:

答案 0 :(得分:2)

有多种方法可以获得所需的结果:

选项1

可能最好使用 DataFrame.loc 直接索引到 MutliIndex

df.loc[beg:end]

选项2

如果您需要使用between_time,则可以unstack索引的第二级,然后使用between_time,最后使用stack第二级:

df.unstack().between_time(beg,end).stack()

选项3

正如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