Советы / справка о том, как определить функцию, которая вычисляет максимальные и минимальные значения списка, учитывая значение другого списка - PullRequest
0 голосов
/ 29 января 2020

Я работаю с CSV-файлом почасовых данных о температуре для указанного c местоположения в течение года. Оттуда я создал кадр данных в pandas со следующими списками: DOY (24 для каждого дня), Время (в минутах; 0, 60, 120 и т. Д. c.) И температура.

Эти данные служат входными данными для модели, которую я имею в Python (ноутбуки Jupyter, работающей на iOS), которая предсказывает температуры тела животных при решении для ряда биофизических уравнений теплового потока. Для этой модели у меня есть функция, которая имеет аргументы минимальной и максимальной температуры для каждого дня. В файле csv каждый день содержит 24 строки данных, поскольку они дают почасовые значения температуры. Мне нужно иметь возможность перебирать этот CSV-файл и выбирать минимальное и максимальное значение температуры за день до текущего дня [i-1], текущего дня [i] и следующего дня [i + 1] в другой функции что у меня уже есть. У кого-нибудь есть предложения по настройке этих функций? Я все еще довольно плохо знаком с Python (<1 года опыта), поэтому любая помощь будет очень признательна! :) </p>

Изменить, чтобы уточнить:

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.). Но теперь, когда у меня есть список почасовых температур за весь год, я пытаюсь найти лучший способ либо изменить эти функции, либо определить новые функции, которые я мог бы вызывать в этих функциях, чтобы позволить мне вытащить минимум и максимум значения температуры для каждого конкретного c DOY (день года, который является еще одним списком в моей df).

Другими словами, мой CSV-файл имеет почасовую температуру для каждого DOY, поэтому 24 температуры в день. Мне нужно перебрать, чтобы вычислить и вызвать минимальную и максимальную температуры для данного дня в этих функциях. Любые советы будут полезны! Спасибо!

Кроме того, я очень новичок в переполнении стека. Я опубликовал этот же вопрос несколько месяцев go и не смог его решить (вероятно, потому, что я слишком долго следил за комментарием человека). Я прошу прощения, если был лучший способ привлечь внимание и обратную связь для более старого вопроса .. Еще раз спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...