[英]Finding the highest value
因此,我目前正在使用循环搜索我的csv数据,以找到一组天的“高”和“低”值,然后计算每天的平均值。 有了这些平均值,我想在其中找到最高的平均值,但是我一直很难做到。 这是我目前所拥有的。
for row in reversed(list(reader1)):
openNAS, closeNAS = row['Open'], row['Close']
highNAS, lowNAS = row['High'], row['Low']
dateNAS = row['Date']
averageNAS = (float(highNAS) + float(lowNAS)) / 2
bestNAS = max(averageNAS)
我确实意识到max(averageNAS)
不起作用,因为averageNAS
不是列表,并且由于在csv文件中找不到平均值,因此我也不能执行max(row['Average'])
。
当找到最高平均值时,我也希望能够包括它的日期,以便我的程序可以打印出最高平均值发生的日期。 提前致谢。
一种可能的解决方案是创建一个平均值字典,其中日期是键,而平均值是值:
averageNAS = {}
然后计算平均值并将其插入此字典中:
for row in reversed(list(reader1)):
highNAS, lowNAS = row['High'], row['Low']
dateNAS = row['Date']
averageNAS[dateNAS] = (float(highNAS) + float(lowNAS)) / 2 # Insertion
现在,您可以通过找到最大值来获得最大值:
import operator
bestNAS = max(averageNAS.items(), key=operator.itemgetter(1))
结果将是一个元组,如:
# (1, 8.0)
这意味着第一天的平均值最高。 平均为8。
如果您不需要这一天,则可以创建列表而不是字典,然后追加到字典中。 这使得找到最大值变得容易一些:
averageNAS = []
for ...
averageNAS.append((float(highNAS) + float(lowNAS)) / 2)
bestNAS = max(averageNAS)
我想到了一些解决方案。
与现有解决方案最相似的方法是在计算平均值时创建一个平均值列表,然后从该列表中获取最大值。 根据您的示例,代码如下所示:
averageNAS = []
for row in reversed(list(reader1)):
openNAS, closeNAS = row['Open'], row['Close']
highNAS, lowNAS = row['High'], row['Low']
dateNAS = row['Date']
averageNAS.append((float(highNAS) + float(lowNAS)) / 2)
# the maximum of the list only needs to be done once (at the end)
bestNAS = max(averageNAS)
除了创建整个列表,您还可以维护一个变量,该变量是迄今为止您已经“看到”的最大平均NAS以及与之关联的dateNAS。 看起来像:
bestNAS = float('-inf')
bestNASdate = None
for row in reversed(list(reader1)):
openNAS, closeNAS = row['Open'], row['Close']
highNAS, lowNAS = row['High'], row['Low']
dateNAS = row['Date']
averageNAS = (float(highNAS) + float(lowNAS)) / 2
if averageNAS > bestNAS:
bestNAS = averageNAS
bestNASdate = dateNAS
如果您想使用软件包作为解决方案,我相当确定pandas软件包可以轻松有效地做到这一点。 我不是100%肯定pandas语法是正确的,但是该库包含完成此操作所需的一切。 它基于numpy,因此操作比普通python循环更快/更高效。
from pandas import DataFrame, read_csv
import pandas as pd
df = pd.read_csv(r'file location')
df['averageNAS'] = df[["High", "Low"]].mean(axis=1)
bestNASindex = df['averageNAS'].argmax() # 90% sure this is the right syntax
bestNAS = df['averageNAS'][bestNASindex]
bestNASdate = df['date'][bestNASindex]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.