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

如何在Python中复现Excel SLOPE函数 计算风切变指数并新增DataFrame列

风切变指数Python实现方案

风切变指数的计算逻辑你已经很清楚了:对高度对数和风速对数做线性回归,返回的斜率就是目标值,和ExcelSLOPE函数的计算逻辑完全一致,以下是适配你的需求的可直接运行的实现:

前置依赖

需要用到pandas、numpy,线性回归可以选scipy.stats.linregress(可读性更高)或原生numpy.polyfit(不需要额外安装scipy),结果完全等价。

实现步骤

首先预设固定高度的对数数组,因为高度是固定值不需要重复计算:

import numpy as np
import pandas as pd
from scipy.stats import linregress

# 高度顺序和你df中的风速列顺序一一对应
heights = [40, 60, 80]
ln_height = np.log(heights)

定义逐行计算风切变的函数,替换函数内的列名为你df中实际的风速列名即可:

def get_shear_index(row):
    # 提取当前行三个高度的风速,取对数
    ln_ws = np.log([row['ws_40m'], row['ws_60m'], row['ws_80m']])
    # 线性回归取斜率作为风切变指数
    return linregress(ln_height, ln_ws).slope

# 若不想使用scipy,可替换为numpy.polyfit实现,结果一致:
# def get_shear_index(row):
#     ln_ws = np.log([row['ws_40m'], row['ws_60m'], row['ws_80m']])
#     return np.polyfit(ln_height, ln_ws, deg=1)[0]

对df逐行应用函数,新增结果列:

df['shear_index'] = df.apply(get_shear_index, axis=1)

注意事项

  • 若风速存在0值或负值,取对数会得到NaN,最终计算结果也会为NaN,属于正常逻辑
  • 计算逻辑和ExcelSLOPE(ln_ws序列, ln_h序列)的输出完全一致,不需要额外校准

内容的提问来源于stack exchange,提问作者gigWindcat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:06:06