Pandas按城市分组计算每10分钟步长的1小时滚动平均降水量
滚动窗口计算城市分时段平均降水量问题及解决方案
数据集基础信息
现有名为df的数据集,包含以下3个字段:
city:降水量对应的城市event_timestamp:降水量的计算时间戳precipitation:降水量数值
前置处理步骤
首先通过以下代码将event_timestamp对齐到最近的10分钟整时刻,生成新字段ten_ts:
df["ten_ts"] = df["event_timestamp"].dt.floor("10 min")
计算需求
按城市分组,计算每个10分钟整时刻对应的过去1小时内的降水量平均值,本质是实现窗口大小为1小时、步长为10分钟的滚动窗口降水量均值计算。
错误/低效尝试
第一次尝试的代码输出结果不符合预期:
df.groupby(["city", "ten_ts"]).rolling('1h', on='event_timestamp')["precipitation_1h"].mean().reset_index()
后续改用常规for循环实现,运行速度极慢,频繁出现内核崩溃问题。
可行实现方案
# 先按城市+10分钟时刻聚合,得到每个10分钟区间的降水总量和数据条数 df2 = df.groupby(["city", "ten_ts"]).agg({'precipitation': ['sum', 'count']}).reset_index() df2.columns = ["city", "ten_ts", "ppt_sum", "ppt_count"] # 按城市分组,对10分钟聚合结果做1小时滚动求和 df3 = df2.groupby("city").rolling('1H', on="ten_ts")[["ppt_sum", "ppt_count"]].sum().reset_index() # 计算滚动窗口内的平均降水量 df3["avg_ppt"] = df3["ppt_sum"] / df3["ppt_count"]
内容的提问来源于stack exchange,提问作者skdhfgeq2134
相关产品推荐
相关产品推荐

