对于Python中另一个列表的每个不同值,计算一个列表的最大值和最小值的最佳方法是什么?
假设我在Python中有三个成对的数字数据列表。这些列表用于1-365之间的年份编号、0-24之间的小时编号以及当时的相应温度。我提供了以下示例列表:对于Python中另一个列表的每个不同值,计算一个列表的最大值和最小值的最佳方法是什么?,python,python-3.x,function,loops,for-loop,Python,Python 3.x,Function,Loops,For Loop,假设我在Python中有三个成对的数字数据列表。这些列表用于1-365之间的年份编号、0-24之间的小时编号以及当时的相应温度。我提供了以下示例列表: day_of_year = [1,1,1,1,1,1,1,1,1,1,1,1,1,1] #day = Jan 1 in this example hour_of_day = [2,4,6,8,10,12,14,16,18,20,22,24] temperature =[23.1,22.0,24.1,26.5,23.8,40.1,32.7
day_of_year = [1,1,1,1,1,1,1,1,1,1,1,1,1,1] #day = Jan 1 in this example
hour_of_day = [2,4,6,8,10,12,14,16,18,20,22,24]
temperature =[23.1,22.0,24.1,26.5,23.8,40.1,32.7,41.3,29.4,36.4,22.0,24.1]
我有一整年一个地点的每小时配对数据,我刚刚在上面显示了简化的列表。因此,对于每一天,我有24天的年值,重复的数字相同,在这个例子中,天=1和24个温度值,因为它们是每小时的数据。我试图设计一个for循环,允许我迭代这些数据,计算并使用一年中每天的最高和最低温度,因为我的代码使用的另一个函数需要调用这些值。如果一年中的第_天相同,那么引用所有温度值的最佳方法是什么,以计算每天的最高和最低温度
我有一个接受以下输入的函数:
今天最低温度,明天最低温度,今天最高温度,昨天最高温度
我需要弄清楚如何为一年中的每一天提取这些值。我正在寻找最好的方法来做到这一点的建议。如有任何建议/提示,将不胜感激 根据要使用的数据结构,有很多方法可以实现这一点。如果你不关心最小值和最大值何时出现,那么我个人会这样做
from collections import defaultdict
daily_temps = defaultdict(list)
for day, value in zip(day_of_year, temperature):
daily_temps[day].append(value)
ranges = dict()
for day, values in temps.items():
ranges[day] = (min(values), max(values))
基本上,您正在构建一个中间dict,该dict将一年中的每一天映射到该天所有度量的列表。然后在第二步中,您使用该dict创建最终dict,该dict将一年中的每一天映射到一个元组,该元组是当天记录的最小值和最大值。您可以使用pandas,这样做非常有效。我正在使用熊猫1.0.1。我们最终用它来完成这项任务
import pandas as pd
df = pd.DataFrame({'day_of_year': day_of_year, 'hour_of_day': hour_of_day, 'temperature': temperature})
print(df)
day_of_year hour_of_day temperature
0 1 2 23.1
1 1 4 22.0
2 1 6 24.1
3 1 8 26.5
4 1 10 23.8
5 1 12 40.1
6 1 14 32.7
7 1 16 41.3
8 1 18 29.4
9 1 20 36.4
10 1 22 22.0
11 1 24 24.1
df.groupby('day_of_year').agg( \
min_temp=('temperature', 'min'),
max_temp=('temperature', 'max')) \
.reset_index() \
.to_dict('records')
[{'day_of_year': 1, 'min_temp': 22.0, 'max_temp': 41.3}]
现在假设我们有超过一天的数据
day_of_year min_temp max_temp
0 1.0 22.0 41.3
1 2.0 24.0 26.0
2 3.0 24.5 42.3
grouped = df.groupby('day_of_year') \
.agg(min_temp=('temperature', 'min'),
max_temp=('temperature', 'max')) \
.reset_index()
tmrw = grouped.shift(-1) \
.rename( \
columns={'min_temp': 'min_temp_tmrw',
'max_temp': 'max_temp_tmrw'}) \
.drop('day_of_year', axis=1)
pd.concat([grouped, tmrw], axis=1).to_dict('records')
[{'day_of_year': 1.0,
'min_temp': 22.0,
'max_temp': 41.3,
'min_temp_tmrw': 24.0,
'max_temp_tmrw': 26.0},
{'day_of_year': 2.0,
'min_temp': 24.0,
'max_temp': 26.0,
'min_temp_tmrw': 24.5,
'max_temp_tmrw': 42.3},
{'day_of_year': 3.0,
'min_temp': 24.5,
'max_temp': 42.3,
'min_temp_tmrw': nan,
'max_temp_tmrw': nan}]
您是否考虑过将其放入数据框中,以便按天分组并提取最小值和最大值?您想要一个显示如何做到这一点的答案吗?温度列表包含所有时间和所有天的所有温度?全部都在一个列表中?大家好,我为延迟回复道歉@是的,那会很有帮助。您认为这个选项比使用类更好吗?我对课程甚至不太熟悉,但这是我在这里寻找解决方案时在互联网上出现的另一个想法。@BrainDead是的,温度是一个巨大的列表谢谢!我刚试过这个,效果很好。正如您所说的,这将生成一个元组,其中包含每天的最小值和最大值。我希望将数据放在一个列表中,因为我需要在一个函数中迭代它们来计算其他内容。我想象着在zipdaily_min,daily_max中创建一个for循环,比如for min,max:你会建议简单地将元组转换为列表,还是会以不同的结构生成一个每日最低和最高温度的列表?谢谢你花时间做这些!我只是坐下来仔细检查你的代码,以确保我完全理解。。。一切都很容易理解!我唯一想弄明白的是如何在列表中存储最低和最高温度。我希望能够遍历最低和最高温度,并绘制它们。他们在这里的储存方式不允许我这么做。你知道怎么做吗?另外,你能解释一下“记录”代码的作用吗?提前感谢-你必须反复浏览字典列表并提取你需要的内容。这应该是相当简单的,即使是初学者。请自己尝试一下。test\u df=pd.DataFrame{DOY':DOY,'TIME':TIME,'tau sun':tau sun}mins\u maxes=[test\u df.groupby'DOY'。agg\min\u temp='tau sun','min',max\u temp='tau sun','max'\.reset\u index]\.to\u dict'records']daily\u mins=mins\u maxes['min\u temp']max1 5月1=[k,mins\u-esmin\u-maxin][k==120]给我类型错误列表索引必须是整数或切片,而不是str。是否有任何方法可以将数据作为整数列表从这里拉出@黄金周只需使用列表即可。例如,要获取分钟数,您可以对分钟数最大值中的项目执行[item['min_temp']等操作,以获取其他列的分钟数。您也无法通过删除to_dict['records']来转换为dict。您可以简单地执行mins\u maxes.min\u temp.values。同时删除groupby语句周围的括号