特定の場所の 1 年間の 1 時間ごとの温度データの csv ファイルを使用しています。そこから、DOY (毎日 24)、時間 (0、60、120 など)、温度のリストを含むデータフレームを pandas で作成しました。
これらのデータは、一連の生物物理学的熱流束方程式を解くときに動物の体温を予測する Python (iOS で実行されている Jupyter ノートブック) にあるモデルの入力データとして機能しています。そのモデルには、毎日の最小温度と最大温度の引数を持つ関数があります。csv ファイルでは、1 時間ごとの気温を示しているため、毎日 24 行のデータがあります。この csv ファイルを繰り返し処理し、別の関数で当日 [i-1]、当日 [i]、翌日 [i+1] の前日における最低気温と最高気温の値を選択できるようにする必要があります。私がすでに持っていること。これらの機能を設定する方法について誰か提案がありますか? 私はまだ Python にかなり慣れていないので (1 年未満の経験)、どんな助けも本当に感謝しています! :)
明確にするために編集します。
import math
import itertools
%pylab inline
import matplotlib as plt
import pandas as pd
import numpy as np
%cd "/Users/lauren/Desktop"
Ta_input = pd.DataFrame(pd.read_csv("28Jan_Mesa_Ta.csv"))
Ta_input.columns = ['', 'doy', 'time', 'Ta']
Ta_input.to_numpy()
doy =list(Ta_input['doy'])
time=list(Ta_input['time'])
Ta=list(Ta_input['Ta'])
micro_df = pd.DataFrame(list(zip(doy,time, Ta)),
columns=['doy','time', 'Ta'])
print(micro_df)
##### Below is the readout showing what the df looks like ###
Populating the interactive namespace from numpy and matplotlib
/Users/lauren/Desktop
doy time Ta
0 1 0 4.434094
1 1 60 4.383863
2 1 120 4.115001
3 1 180 3.831146
4 1 240 3.537708
... ... ... ...
8755 365 1140 6.478684
8756 365 1200 5.744720
8757 365 1260 5.212801
8758 365 1320 4.568695
8759 365 1380 4.398663
[8760 rows x 3 columns]
/usr/local/Caskroom/miniconda/base/lib/python3.7/site-packages/IPython/core/magics/pylab.py:160: UserWarning: pylab import has clobbered these variables: ['time', 'polyint', 'plt', 'insert']
`%matplotlib` prevents importing * from pylab and numpy
"\n`%matplotlib` prevents importing * from pylab and numpy"
私はこれらの機能を持っています
def anytime_temp(t,max_t_yesterday,min_t_today,max_t_today,min_t_tomorrow):
#t = time
#i = today
#i-1 = yesterday
#i+1 = tomorrow
#Tn = daily min
#Tx = daily max
if 0.<=t<=5.:
return max_t_yesterday*Gamma_t(t) + min_t_today*(1-Gamma_t(t))
elif 5.<t<=14.:
return max_t_today*Gamma_t(t)+ min_t_today*(1-Gamma_t(t))
else:
return max_t_today*Gamma_t(t)+ min_t_tomorrow*(1-Gamma_t(t))
# Rabs = amount of radiation absorbed by an organism
def Rabs(s,alpha_s,h,lat,J,time,long,d,tau,alt,rg,alpha_l,max_t_yesterday,min_t_today,max_t_today,min_t_tomorrow,eg,Tave,amp,z,D):
if math.cos(zenith(latitude,julian,time,longitude)) > 0.:
return s*alpha_s*(Fh(h,lat,J,time,long,d)*(hS(J,lat,time,long,tau,alt))+0.5*Sd(J,lat,time,long,tau,alt)+0.5*Sr(rg,J,lat,time,long,tau,alt)) + 0.5*alpha_l*(Sla(anytime_temp(time,max_t_yesterday,min_t_today,max_t_today,min_t_tomorrow)) + Slg(eg,Tzt(Tave,amp,z,D,time)))
else:
return 0.5*alpha_l*(Sla(anytime_temp(time,max_t_yesterday,min_t_today,max_t_today,min_t_tomorrow)) + Slg(eg,Tzt(Tave,amp,z,D,time)))
...どちらも昨日の最高気温、今日の最低気温と最高気温、明日の最低気温を入力として取ります。私のコードは、これらの値を単一の数値 (例: min_t_today = 25) に設定するだけで実行できるように設定されています。しかし、1 年間の 1 時間ごとの気温のリストができたので、これらの関数を変更するか、これらの関数で呼び出すことができる新しい関数を定義して、最小値と最大値を取得できるようにする最善の方法を見つけようとしています。特定の DOY ごとの温度値 (1 年のうちの日、これは私の df の別のリストです)。
言い換えれば、私の csv ファイルには各 DOY の 1 時間ごとの温度が含まれているため、1 日あたり 24 の温度になります。これらの関数で特定の日の最低気温と最高気温を計算して呼び出すには、繰り返し処理を行う必要があります。どんなヒントも役に立ちます!ありがとう!