【问题标题】:multi index(time series) slicing error in pandas熊猫中的多索引(时间序列)切片错误
【发布时间】:2018-08-10 10:24:48
【问题描述】:

我有以下数据框。日期/时间是多索引索引。 当我执行此代码时,

<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

提前致谢

【问题讨论】:

  • 你需要df = df.sort_index(),正确的工作需要总是排序MultiIndex。检查this
  • 请同时查看this
  • 哦..但我想保持时间索引顺序..我使用了“df = df.sort_index()”但是我安排的时间顺序改变了..没有其他方法可以保持时间索引顺序和索引切片?
  • 不幸的是没有索引。对于 MultiIndex 需要排序 levels,我认为是因为性能。
  • 好的.. 非常感谢.. 尝试其他方法

标签: pandas indexing time-series


【解决方案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

【讨论】:

  • @jerryhan - 很高兴能帮上忙!
猜你喜欢
  • 2015-06-09
  • 2019-10-28
  • 2017-02-22
  • 1970-01-01
  • 2020-10-04
  • 2018-07-28
  • 2020-06-19
  • 2021-03-27
  • 2020-06-08
相关资源
最近更新 更多