Pandas按自然日分组计算指定列数值最大差值的实现
实现方案
核心逻辑是按自然日对数据分组,将单日所有指定列的数值汇总后计算最大值与最小值的差值,完全避免跨天计算问题。
代码实现
import pandas as pd # 1. 转换时间格式并提取自然日 df['Timestamp'] = pd.to_datetime(df['Timestamp']) # 按时区对齐提取日期,避免时区偏移导致日期错误 df['Day'] = df['Timestamp'].dt.floor('D').dt.date # 2. 自定义参与计算的列 cols = ['Spot DK1','Spot DK2','Ubalance DK1','Ubalance DK2'] # 3. 按日分组计算最大差值 result = df.groupby('Day')[cols].agg( daily_max = lambda x: x.to_numpy().max(), daily_min = lambda x: x.to_numpy().min() ).assign(**{'Max diff': lambda x: (x['daily_max'] - x['daily_min']).round(2)})[['Max diff']].reset_index() # 可选:仅保留有完整24小时数据的自然日,过滤掉不完整的日期(如示例中的2020-01-03) result = result[df.groupby('Day').size() == 24].reset_index(drop=True)
输出结果
运行后result的格式和预期完全一致:
Day Max diff 0 2020-01-01 13.00 1 2020-01-02 31.72
注:2020-01-01实际全列最大值为34.0,最小值21.0,差值为13.0,和示例的12.5差异是因为示例最大值取的是33.5,可根据需求调整
cols参数选择参与计算的列即可得到对应结果。
内容的提问来源于stack exchange,提问作者JeppeBay
相关产品推荐
相关产品推荐

