Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于Python中另一个列表的每个不同值,计算一个列表的最大值和最小值的最佳方法是什么?_Python_Python 3.x_Function_Loops_For Loop - Fatal编程技术网

对于Python中另一个列表的每个不同值,计算一个列表的最大值和最小值的最佳方法是什么?

对于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

假设我在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,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语句周围的括号