Python计算多站点多年权重累积降水量WAP

发布时间 2023-07-27 16:20:42作者: 蓝色大螃蟹

之前计算过单站点的WAP,现在计算多站点的WAP

数据样子直接参考上几次的文章

直接上代码:

#!usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: Su
@file: getWAP.py
@time: 2023/07/27
@desc:
"""
import pandas as pd
import math

# 打开excel文件
df = pd.read_excel('G:/drought/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()


    # 创建一个新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)
    # print(df2)
    # 将循环出来的结果,按站点名字一个一个的写入excel
    temp.append(df2)
    # 整合DataFrame列表里的数据,进行纵向拼接
    rdf= pd.concat(temp,axis=0)
    rdf.to_excel('G:/drought/processdata/lianxi/鄂尔多斯WAP.xlsx')