如何将pandas DataFrame中1小时间隔降雨数据转换为5分钟间隔
实现代码
完整实现逻辑如下,可直接运行:
import pandas as pd # 1. 合并日期时间列为datetime格式,方便后续时间计算 rain['datetime'] = pd.to_datetime(rain['date'] + ' ' + rain['time']) # 可选:先对时间做排序、去重处理,避免脏数据影响结果 rain = rain.sort_values('datetime').drop_duplicates('datetime', keep='last').reset_index(drop=True) # 2. 计算单5分钟时段的降雨量:每小时总量平分为12份 rain['single_5min_rain'] = rain['rain_gauge_value'] / 12 # 3. 生成每小时对应的12个5分钟时间偏移量:从当前小时整点前55分钟到整点,步长5分钟 offset_list = [pd.DateOffset(minutes=-55 + i*5) for i in range(12)] rain['time_offset'] = [offset_list] * len(rain) # 4. 拆分多行,生成5分钟粒度数据 rain_5min = rain.explode('time_offset', ignore_index=True) # 计算每个5分钟节点的实际时间 rain_5min['datetime'] = rain_5min['datetime'] + rain_5min['time_offset'] # 5. 拆分回date、time列,输出符合要求的结果 rain_5min['date'] = rain_5min['datetime'].dt.strftime('%Y-%m-%d') rain_5min['time'] = rain_5min['datetime'].dt.strftime('%H:%M:%S') result = rain_5min[['date', 'time', 'single_5min_rain']].rename(columns={'single_5min_rain': 'rain_gauge_value'})
效果验证
你给出的示例输入:原行为2020-10-09 00:00:00对应降雨量6.0,运行后会生成12行数据,每行降雨量为6/12=0.5,时间范围刚好为2020-10-08 23:05:00到2020-10-09 00:00:00,和你预期的输出完全一致。
内容的提问来源于stack exchange,提问作者CG7
相关产品推荐
相关产品推荐

