簡體   English   中英

使用步驟對 pandas DateTimeIndex 進行切片

[英]Slicing pandas DateTimeIndex with steps

我經常用 DateTimeIndexes 處理 pandas DataFrame,我想在其中 - 例如 - select 只有索引小時 = 6 的部分。我目前知道如何做到這一點的唯一方法是重新索引:

df.reindex(pd.date_range(*df.index.to_series().agg([min, max]).apply(lambda ts: ts.replace(hour=6)), freq="24H"))

但這是非常難以理解和復雜的,當存在具有多個 DateTimeIndex 級別的 MultiIndex 時,情況會變得更糟。 我知道 use.reset_index() 然后 df.where 或 df.loc 帶有條件語句的方法,但是有沒有更簡單的方法來使用常規 IndexSlicing 來做到這一點? 我嘗試如下

df.loc[df.index.min().replace(hour=6)::pd.Timedelta(24, unit="H")]

但這給出了 TypeError:

TypeError: '>=' not supported between instances of 'Timedelta' and 'int'

如果您的索引是 DatetimeIndex,您可以使用:

>>> df[df.index.hour == 6]
                     val
2022-03-01 06:00:00    7
2022-03-02 06:00:00   31
2022-03-03 06:00:00   55
2022-03-04 06:00:00   79
2022-03-05 06:00:00  103
2022-03-06 06:00:00  127
2022-03-07 06:00:00  151
2022-03-08 06:00:00  175
2022-03-09 06:00:00  199
2022-03-10 06:00:00  223
2022-03-11 06:00:00  247
2022-03-12 06:00:00  271
2022-03-13 06:00:00  295
2022-03-14 06:00:00  319
2022-03-15 06:00:00  343
2022-03-16 06:00:00  367
2022-03-17 06:00:00  391
2022-03-18 06:00:00  415
2022-03-19 06:00:00  439
2022-03-20 06:00:00  463
2022-03-21 06:00:00  487

設置:

dti = pd.date_range('2022-3-1', '2022-3-22', freq='1H')
df = pd.DataFrame({'val': range(1, len(dti)+1)}, index=dti)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM