python计算多站点多年标准化权重降水指数SPIW
目标计算的是SPIW60为近60天的标准化权重降水指数
1、先计算好WAP,上一个帖子已经算好
2、再计算SPI2(WAP)
代码如下:
#!usr/bin/env python # -*- coding:utf-8 -*- """ @author: Su @file: getWAP.py @time: 2023/07/27 @desc: """ import pandas as pd import math import gma # 打开excel文件 df = pd.read_excel('processdata/lianxi/鄂尔多斯.xlsx') # 初始化空列表为了把wap数据写入excel,避免excel总是仅得出最后一个数的情况 temp = [] # 给站点分类 nameList = set(df.name.values) # 先写个循环进行站点分类,再提取rain值进行WAP计算 for i in nameList: # 进行站点遍历 dfName = df[df['name'] == i] # print(dfName) #df2 = pd.DataFrame() # 提取rain值 rain = dfName.rain.values # 进行WAP公式计算 WAP1 = 0.85 * rain WAP2 = math.pow(0.85, 2) * rain # 创建dataframe WAP1 = pd.DataFrame(WAP1) WAP2 = pd.DataFrame(WAP2) # 第一列第二行加第二列第一行 mvWAP1 = WAP1.shift(-1) itWAP = mvWAP1 + WAP2 WAP = itWAP.shift() # 计算标准化权重降水指数SPIW,2个月的 SPIW2 = gma.climet.SPI(WAP, Scale=2) # 创建一个新DataFrame放入分类好后的站点数据 df2 = pd.DataFrame(dfName) # 把计算好的WAP值放入df2新增第一列 df2.insert(loc=0, column='WAP1', value=WAP1.values) df2.insert(loc=1, column='WAP2', value=WAP2.values) df2.insert(loc=2, column='WAP', value=WAP.values) df2.insert(loc=3,column='SPIW2', value=SPIW2) # 将循环出来的结果,按站点名字一个一个的写入excel temp.append(df2) # 整合DataFrame列表里的数据,进行纵向拼接 rdf = pd.concat(temp,axis=0) rdf.to_excel('processdata/lianxi/鄂尔多斯SPIW2.xlsx')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了