Python数据分析实例,利用Pandas建立流域三层蒸发和蓄满产流模型

根据水量平衡方程推求土壤含水量

if i ==1:
	df["WU"][i] = WUM
	df["WL"][i] = WLM
	df["WD"][i] = WDM
              
else:
	dw=df["PE"][i-1]-df['R'][i-1]
	df["WU"][i] = df["WU"][i-1]+dw
	df["WL"][i] = df["WL"][i-1]
	df["WD"][i] = df["WD"][i-1]
	if df["WU"][i] < 0:
		df["WL"][i] = df["WL"][i-1]+df["WU"][i]
		df["WU"][i] = 0
		df["WD"][i] = df["WD"][i-1]
		if df["WL"][i] < 0:
			df["WD"][i] = df["WD"][i-1]+df["WL"][i]
			df["WL"][i] = 0
			df["WU"][i] = 0
			if df["WD"][i]<0:
				df["WL"][i] = 0
				df["WU"][i] = 0
				df["WD"][i] = 0
                                
	if df["WU"][i] > WUM:
		df["WL"][i] = df["WU"][i]-WUM+df["WL"][i-1]
		df["WU"][i] = WUM
		df["WD"][i] = df["WD"][i-1]
		if df["WL"][i] > WLM:
			df["WD"][i] = df["WL"][i]-WLM+df["WD"][i-1]
			df["WL"][i] = WLM
			df["WU"][i] = WUM
			if df["WD"][i] > WDM:
				df["WL"][i] = WLM
				df["WU"][i] = WUM
				df["WD"][i] = WDM

土壤三层蒸发模型,EU,EL,ED的计算

if df["WU"][i]+df["P"][i] >= df["EP"][i]:
	df["EU"][i]=df["EP"][i]
	df["EL"][i]=0
	df["ED"][i]=0
if df["WU"][i]+df["P"][i] < df["EP"][i] and df["WL"][i] >= C*WLM:
	df["EU"][i]=df["WU"][i]+df["P"][i]
	df["EL"][i]=(df["EP"][i]-df["EU"][i])*(df["WL"][i]/WLM)
	df["ED"][i]=0
if df["WU"][i]+df["P"][i] < df["EP"][i] and C*(df["EP"][i]-df["EU"][i])<= df["WL"][i] and df["WL"][i]<C*WLM:
	df["EU"][i]=df["WU"][i]+df["P"][i]
	df["EL"][i]=C*(df["EP"][i]-df["EU"][i])
	df["ED"][i]=0
if df["WU"][i]+df["P"][i] < df["EP"][i] and df["WL"][i]<C*(df["EP"][i]-df["EU"][i]):
	df["EU"][i]=df["WU"][i]+df["P"][i]
	df["EL"][i]=df["WL"][i]
	df["ED"][i]=C*(df["EP"][i]-df["EU"][i])-df["EL"][i]

产流R计算

a = WMM*(1-math.pow((1-df["W"][i]/WM),(1/(1+b))))
if a + df["PE"][i] <= WMM:
	df["R"][i] = df["PE"][i]+df["W"][i]-WM+WM*math.pow(1-((df["PE"][i]+a)/WMM),b+1)

else:
	df["R"][i] = df["PE"][i]+df["W"][i]-WM
if df["R"][i] < 0:
	df["R"][i] = 0

分水源Rg,Rd计算

if df["R"][i]>0:
	df['R/PE'][i]=(df["R"][i])/(df["PE"][i])
	if df['R/PE'][i] < 1:
		if df["PE"][i] <= FC:
			df["RD"][i] = 0
			df["RG"][i] = df["PE"][i]*df['R/PE'][i]
		else:
			df["RG"][i] = FC*df['R/PE'][i]
			df["RD"][i] = (df["PE"][i]-FC)*df['R/PE'][i]
		if df['R/PE'][i] == 1:
			if df["PE"][i] > FC:
				df["RG"][i] = FC
				df["RD"][i] = df["PE"][i]-FC
			else:
				df["RG"][i] = df["PE"][i]
				df["RD"][i] = 0	

完整代码

import pandas as pd 
import numpy as np
import math
file_path = '/Users/joythegreat/Desktop/三层蒸发/'

#设定常量
WUM,WLM,WDM,b,C,FC= 20,60,40,0.3,(1/6),2.5
WM = WUM+WLM+WDM
WMM = WM*(1+b)

#读入表格
df = pd.read_excel(file_path + '大作业1.xlsx',index_col='日期')
df = df.fillna(0)


for i in range(1,154):
        
        #计算WU,WL,WD
        if i ==1:
                df["WU"][i] = WUM
                df["WL"][i] = WLM
                df["WD"][i] = WDM
                
               
        else:
                dw=df["PE"][i-1]-df['R'][i-1]
                df["WU"][i] = df["WU"][i-1]+dw
                df["WL"][i] = df["WL"][i-1]
                df["WD"][i] = df["WD"][i-1]
                if df["WU"][i] < 0:
                        df["WL"][i] = df["WL"][i-1]+df["WU"][i]
                        df["WU"][i] = 0
                        df["WD"][i] = df["WD"][i-1]
                        if df["WL"][i] < 0:
                                df["WD"][i] = df["WD"][i-1]+df["WL"][i]
                                df["WL"][i] = 0
                                df["WU"][i] = 0
                                if df["WD"][i]<0:
                                        df["WL"][i] = 0
                                        df["WU"][i] = 0
                                        df["WD"][i] = 0
                                
                if df["WU"][i] > WUM:
                        df["WL"][i] = df["WU"][i]-WUM+df["WL"][i-1]
                        df["WU"][i] = WUM
                        df["WD"][i] = df["WD"][i-1]
                        if df["WL"][i] > WLM:
                                df["WD"][i] = df["WL"][i]-WLM+df["WD"][i-1]
                                df["WL"][i] = WLM
                                df["WU"][i] = WUM
                                if df["WD"][i] > WDM:
                                        df["WL"][i] = WLM
                                        df["WU"][i] = WUM
                                        df["WD"][i] = WDM
                                
                
                
                            
    
        #计算E
        if df["WU"][i]+df["P"][i] >= df["EP"][i]:
                df["EU"][i]=df["EP"][i]
                df["EL"][i]=0
                df["ED"][i]=0
        if df["WU"][i]+df["P"][i] < df["EP"][i] and df["WL"][i] >= C*WLM:
                df["EU"][i]=df["WU"][i]+df["P"][i]
                df["EL"][i]=(df["EP"][i]-df["EU"][i])*(df["WL"][i]/WLM)
                df["ED"][i]=0
        if df["WU"][i]+df["P"][i] < df["EP"][i] and C*(df["EP"][i]-df["EU"][i])<= df["WL"][i] and df["WL"][i]<C*WLM:
                df["EU"][i]=df["WU"][i]+df["P"][i]
                df["EL"][i]=C*(df["EP"][i]-df["EU"][i])
                df["ED"][i]=0
        if df["WU"][i]+df["P"][i] < df["EP"][i] and df["WL"][i]<C*(df["EP"][i]-df["EU"][i]):
                df["EU"][i]=df["WU"][i]+df["P"][i]
                df["EL"][i]=df["WL"][i]
                df["ED"][i]=C*(df["EP"][i]-df["EU"][i])-df["EL"][i]
                
        #计算E,PE,W
        df["E"][i] = df["EU"][i]+df["EL"][i]+df["ED"][i]
        df["PE"][i] = df["P"][i] - df["E"][i]
        df["W"][i] = df["WU"][i]+df["WL"][i]+df["WD"][i]

        #计算产流
        a = WMM*(1-math.pow((1-df["W"][i]/WM),(1/(1+b))))
        if a + df["PE"][i] <= WMM:
                df["R"][i] = df["PE"][i]+df["W"][i]-WM+WM*math.pow(1-((df["PE"][i]+a)/WMM),b+1)

        else:
                df["R"][i] = df["PE"][i]+df["W"][i]-WM
        if df["R"][i] < 0:
                df["R"][i] = 0
                
        #分水源计算
        if df["R"][i]>0:
                df['R/PE'][i]=(df["R"][i])/(df["PE"][i])
                if df['R/PE'][i] < 1:
                        if df["PE"][i] <= FC:
                                df["RD"][i] = 0
                                df["RG"][i] = df["PE"][i]*df['R/PE'][i]
                        else:
                                df["RG"][i] = FC*df['R/PE'][i]
                                df["RD"][i] = (df["PE"][i]-FC)*df['R/PE'][i]
                if df['R/PE'][i] == 1:
                        if df["PE"][i] > FC:
                                df["RG"][i] = FC
                                df["RD"][i] = df["PE"][i]-FC
                        else:
                                df["RG"][i] = df["PE"][i]
                                df["RD"][i] = 0


                        
df.loc['和'] = df.apply(lambda x: x.sum())
pd.set_option('display.max_columns',None)
pd.set_option('display.width',1000)

#保留一位小数
for i in range(len(df)):
    for j in range(len(df.iloc[i])):
        df.iloc[i][j]=round(df.iloc[i][j],1)
#写入CSV文件
df.to_csv(file_path + '大作业.csv')



Python数据分析萌新,用pandas完成了一次专业相关的作业,有点兴奋,如有错误,还请指正~

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值