我有以下数据框
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 中使用什么功能。
您可以添加 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