pandas中的多索引(时间序列)切片错误

时间:2018-03-02 08:16:23

标签: pandas indexing time-series

我有以下数据框。日期/时间是多索引索引。 当我做这个代码时,

<code>
idx = pd.IndexSlice 
print(df_per_wday_temp.loc[idx[:,datetime.time(4, 0, 0): datetime.time(7, 0, 0)]])" 

但是我收到了错误'MultiIndex Slicing要求索引完全是lexsorted tuple len(2),lexsort depth(1)'。这可能是错误的 索引切片,但我不知道为什么会这样。有人可以解决吗?

                      a          b
date       time                     
2018-01-26 19:00:00  25.08     -7.85
           19:15:00  24.86     -7.81
           19:30:00  24.67     -8.24
           19:45:00    NaN     -9.32
           20:00:00    NaN     -8.29
           20:15:00    NaN     -8.58
           20:30:00    NaN     -9.48
           20:45:00    NaN     -8.73
           21:00:00    NaN     -8.60
           21:15:00    NaN     -8.70
           21:30:00    NaN     -8.53
           21:45:00    NaN     -8.90
           22:00:00    NaN     -8.55
           22:15:00    NaN     -8.48
           22:30:00    NaN     -9.90
           22:45:00    NaN     -9.70
           23:00:00    NaN     -8.98
           23:15:00    NaN     -9.17
           23:30:00    NaN     -9.07
           23:45:00    NaN     -9.45
           00:00:00    NaN     -9.64
           00:15:00    NaN    -10.08
           00:30:00    NaN     -8.87
           00:45:00    NaN     -9.91
           01:00:00    NaN     -9.91
           01:15:00    NaN     -9.93
           01:30:00    NaN     -9.55
           01:45:00    NaN     -9.51
           02:00:00    NaN     -9.75
           02:15:00    NaN     -9.44
...                    ...       ...
           03:45:00    NaN     -9.28
           04:00:00    NaN     -9.96
           04:15:00    NaN    -10.19
           04:30:00    NaN    -10.20
           04:45:00    NaN     -9.85
           05:00:00    NaN    -10.33
           05:15:00    NaN    -10.18
           05:30:00    NaN    -10.81
           05:45:00    NaN    -10.51
           06:00:00    NaN    -10.41
           06:15:00    NaN    -10.49
           06:30:00    NaN    -10.13
           06:45:00    NaN    -10.36
           07:00:00    NaN    -10.71
           07:15:00    NaN    -12.11
           07:30:00    NaN    -10.76
           07:45:00    NaN    -10.76
           08:00:00    NaN    -11.63
           08:15:00    NaN    -11.18
           08:30:00    NaN    -10.49
           08:45:00    NaN    -11.18
           09:00:00    NaN    -10.67
           09:15:00    NaN    -10.60
           09:30:00    NaN    -10.36
           09:45:00    NaN     -9.39
           10:00:00    NaN     -9.77
           10:15:00    NaN     -9.54
           10:30:00    NaN     -8.99
           10:45:00    NaN     -9.01
           11:00:00    NaN    -10.01

提前致谢

1 个答案:

答案 0 :(得分:1)

如果不可能排序索引,则必须创建布尔掩码并按boolean indexing过滤:

from datetime import time
mask = df1.index.get_level_values(1).to_series().between(time(4, 0, 0), time(7, 0, 0)).values
df = df1[mask]
print (df)
                      a      b
date       time               
2018-01-26 04:00:00 NaN  -9.96
           04:15:00 NaN -10.19
           04:30:00 NaN -10.20
           04:45:00 NaN  -9.85
           05:00:00 NaN -10.33
           05:15:00 NaN -10.18
           05:30:00 NaN -10.81