流域三层蒸发和蓄满产流模型
根据水量平衡方程推求土壤含水量
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完成了一次专业相关的作业,有点兴奋,如有错误,还请指正~