假设我有一个带有 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 ... ... ... ...
...
Run Code Online (Sandbox Code Playgroud)
一旦我确定beg和end,我想使用 来df[].between_time(beg,end)从 DataFrame 中获取相关行。唯一的问题是,.between_time(beg,end)似乎只适用于 DateTimeIndex:
*** TypeError: Index must be DatetimeIndex
Run Code Online (Sandbox Code Playgroud)
或者是更合适的方式来做到这一点通过xs()?
df.xs(slice(beg,end),level='tstp')
Run Code Online (Sandbox Code Playgroud)
有多种方法可以获得您想要的结果:
\n\n可能最好的方法是直接使用 DataFrame.loc 索引 MutliIndex:
df.loc[beg:end]\nRun Code Online (Sandbox Code Playgroud)\n\n如果需要使用between_time,可以将unstack索引的第二级取出,然后使用between_time,最后stack返回第二级:
df.unstack().between_time(beg,end).stack()\nRun Code Online (Sandbox Code Playgroud)\n\n正如 IanS 提到的,xs会给你类似的结果:
df.xs(slice(beg,end),level=\'tstp\')\nRun Code Online (Sandbox Code Playgroud)\n\n第一个选项似乎是最干净也是最快的:
\n\n>>> timeit df.loc[beg:end]\n1000 loops, best of 3: 317 \xc2\xb5s per loop\n\n>>> timeit df.unstack().between_time(beg,end).stack()\n100 loops, best of 3: 3.35 ms per loop\n\n>>> timeit df.xs(slice(beg,end),level=\'tstp\')\n1000 loops, best of 3: 632 \xc2\xb5s per loop\nRun Code Online (Sandbox Code Playgroud)\n\n此处为Jupyter 笔记本示例。
\n| 归档时间: |
|
| 查看次数: |
1688 次 |
| 最近记录: |