Python 确定一个数据集中不同年份的平均值

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

我有一个包含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 = 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