Python 确定一个数据集中不同年份的平均值
我有一个包含44522行的数据集,其中包含关于不同年份的信息。我需要使用嵌套循环计算每年的平均值。我有以下代码:Python 确定一个数据集中不同年份的平均值,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个包含44522行的数据集,其中包含关于不同年份的信息。我需要使用嵌套循环计算每年的平均值。我有以下代码: m= len(inf) nrow, ncol = inf.shape print(nrow, ncol) years = [2010, 2011, 2012, 2013, 2014, 2015, 2016] total = 0 index = None for i in range(nrow): year = inf.iloc[i, 0].year data
m= len(inf)
nrow, ncol = inf.shape
print(nrow, ncol)
years = [2010, 2011, 2012, 2013, 2014, 2015, 2016]
total = 0
index = None
for i in range(nrow):
year = inf.iloc[i, 0].year
data = inf.max_wave_height[i]
#print(year)
for j in range(len(years)):
date = years[j]
#print(date)
if year == date:
total = total + data
avg = total/(i+1)
index = i
else: break
此代码仅计算1年,然后停止。那不是我想要的。有人能帮我解决这个问题吗?更改中断以继续:
当if的计算结果为False时,您将立即退出for循环,这是该日期=2011的第一次,如果不查看您的数据帧,很难给出有意义的答案。但一般来说,在这种情况下,最好的解决方案是使用Pandas函数 我将演示一个重采样解决方案,然后您可以将其应用于您自己的数据帧 在第一部分中,我将构建一个数据框架,仅用于演示,使用您在问题中列出的年份的时间序列数据:
years = pd.date_range('1/1/2010', '12/31/2016', freq='D')
print(years)
DatetimeIndex(['2010-01-01', '2010-01-02', '2010-01-03', '2010-01-04',
'2010-01-05', '2010-01-06', '2010-01-07', '2010-01-08',
'2010-01-09', '2010-01-10',
...
'2016-12-22', '2016-12-23', '2016-12-24', '2016-12-25',
'2016-12-26', '2016-12-27', '2016-12-28', '2016-12-29',
'2016-12-30', '2016-12-31'],
dtype='datetime64[ns]', length=2557, freq='D')
np.random.seed(seed=1111)
data = np.random.randint(1, high=100, size=len(years))
df = pd.DataFrame({'col1': years, 'col2': data})
print(df.head(10))
col1 col2
0 2010-01-01 29
1 2010-01-02 56
2 2010-01-03 82
3 2010-01-04 13
4 2010-01-05 35
5 2010-01-06 53
6 2010-01-07 25
7 2010-01-08 23
8 2010-01-09 21
9 2010-01-10 12
然后,实际的解决方案是,使用重采样来找到每年的平均值非常简单
谢谢你的反应,但是我怎么打印每年的计算值呢?哦,很抱歉花了这么长时间,我最近没有回到页面。。。那么,你有没有在计算完后,在内部for循环中尝试过printavg?时间序列数据的频率是多少?很难说,因为它包含了太多的信息。İt给出全年每天每小时的数值。例如,前4510行包含2020年的信息,下8000行包含2011年的信息等等,谢谢你的评论。这可能有效,但ı必须使用嵌套循环。我现在唯一的问题是打印每个变量的计算平均值year@OzgeKilic我很好奇,为什么要使用嵌套循环?这是我必须做的作业,我真的必须用嵌套循环来做,否则我不会通过。我知道它们是解决这个问题的更简单的方法,但我别无选择。
df = df.set_index('col1')
annual_mean = pd.DataFrame()
annual_mean['Anual Mean'] = df.col2.resample('AS').mean()
print(annual_mean)
Anual Mean
col1
2010-01-01 48.723288
2011-01-01 48.931507
2012-01-01 49.237705
2013-01-01 50.386301
2014-01-01 49.715068
2015-01-01 49.753425
2016-01-01 47.346995