如何从“9:30”(第 0 天)到“9:00”(第 1 天)而不是“0:00”到“23:30”之间的一组半小时记录中获取每日最大值“每一天

问题描述 投票:0回答:1

我有以下数据框

df

         Local_Time_Dt             Value
0        1999-02-22 07:30:00       1.5
1        1999-02-22 08:00:00       3.9
2        1999-02-22 08:30:00       3.9
3        1999-02-22 09:00:00       3.9
4        1999-02-22 09:30:00       2.0
... ...
421208   2023-03-03 11:30:00       0
421209   2023-03-03 12:00:00       0
421210   2023-03-03 12:30:00       0
421211   2023-03-03 13:00:00       0
421212   2023-03-03 13:30:00       0

“Local_Time_Dt”列的类型为

datetime64[ns]
(半小时),
Value
为浮点数。

我想要实现的目标是在前一天的“09:30:00”到当天的“09:00:00”之间而不是从“00:00:00”到“23:”之间获得每日最大值

Value
30:00”。

问题是有些日子可能会丢失记录,这可能会导致滚动功能在这种情况下无法工作;由于夏令时,有些日子可能会出现重复的半小时记录。

期望的输出是:

        Local_Time_Dt             Value
0       1999-02-22                 3.9
1       1999-02-23                 4.0
... ...

8775    2023-03-03                 0

我不确定我应该在 Pandas 中使用什么功能。

pandas dataframe
1个回答
0
投票

您可以添加 14.5 小时,以根据需要将日期时间与日期对齐:

out = df.groupby(df['Local_Time_Dt'].add(pd.Timedelta('14h30min')).dt.normalize())['Value'].min()

输出:

Local_Time_Dt
1999-02-22    1.5
1999-02-23    2.0
2023-03-04    0.0
Name: Value, dtype: float64

这里是一个更有意义的最小示例的逻辑细分:

        Local_Time_Dt  Value              +14.5h  normalize   min?
0 1999-02-22 07:30:00      1 1999-02-22 22:00:00 1999-02-22   True
1 1999-02-22 09:30:00      2 1999-02-23 00:00:00 1999-02-23   True
2 1999-02-22 10:00:00      3 1999-02-23 00:30:00 1999-02-23  False
3 1999-02-23 01:00:00      4 1999-02-23 15:30:00 1999-02-23  False
4 1999-02-23 07:30:00      5 1999-02-23 22:00:00 1999-02-23  False
5 1999-02-23 09:00:00      6 1999-02-23 23:30:00 1999-02-23  False
6 1999-02-23 09:30:00      7 1999-02-24 00:00:00 1999-02-24   True
© www.soinside.com 2019 - 2024. All rights reserved.