You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas:如何按索引将固定长度风向数据块替换为平均风向值

解决方案

核心思路:用groupby + transform实现分块替换

Pandas中处理这种固定大小分块的批量计算,最符合风格的方式是生成分组键后结合groupby.transform(),它能自动将分组计算的结果广播回原数据的长度,直接完成替换,完全不需要手动循环。

步骤1:优化风向平均函数(可选但推荐)

你原有的函数用了循环遍历,换成Numpy向量运算能大幅提升效率,同时修正角度转换的逻辑(原逻辑存在错误,比如会把90°转换成270°):

import numpy as np

def hourly_wind_average(WD):
    # 将角度转为弧度,直接对整个Series做向量运算
    rad = WD * np.pi / 180
    # 计算东西/南北方向的分量总和
    u_eastwest = np.sin(rad).sum()
    u_northsouth = np.cos(rad).sum()
    # 求平均分量
    EW_avg = -u_eastwest / len(WD)
    NS_avg = -u_northsouth / len(WD)
    # 转换回角度并修正到0-360°范围
    avg_WD = np.arctan2(EW_avg, NS_avg) * 180 / np.pi
    return avg_WD % 360

步骤2:分块替换风向值

假设你的风向列名为WD,执行以下代码即可完成每60行一组的替换:

# 生成分组键:每60行归为一组
group_keys = np.arange(len(df)) // 60
# 用transform计算每组的平均风向,并替换原列
df['WD'] = df['WD'].groupby(group_keys).transform(hourly_wind_average)

关键说明

  • np.arange(len(df)) // 60:生成一个和DataFrame行数相同的数组,每60个连续元素对应同一个分组编号(0,0,...,0,1,1,...,1...),实现固定大小分块。
  • transform():和apply()不同,它会将分组计算的结果扩展为与原Series相同的长度,每个组内的所有元素都会被替换为该组的平均风向,完美匹配你的需求。

内容的提问来源于stack exchange,提问作者liveFreeOrπHard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:35:51