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')