Python 使用日期列查找数据框的年平均值

Python 使用日期列查找数据框的年平均值,python,pandas,Python,Pandas,在上面的数据框中,我想找到每年的平均值。这不起作用: id vi dates f_id 0 5532714 0.549501 2015-07-07 ff_22 1 5532715 0.540969 2015-07-08 ff_22 2 5532716 0.531477 2015-07-09 ff_22 3 5532717 0.521029 2015-07-10 ff_22 4 5532718 0.5

在上面的数据框中,我想找到每年的平均值。这不起作用:

        id      vi       dates     f_id
0  5532714  0.549501  2015-07-07    ff_22
1  5532715  0.540969  2015-07-08    ff_22
2  5532716  0.531477  2015-07-09    ff_22
3  5532717  0.521029  2015-07-10    ff_22
4  5532718  0.509694  2015-07-11    ff_22
我收到以下错误:
***AttributeError:“Series”对象没有属性“year”

如何解决此问题?

让我们确保日期是datetime数据类型,然后使用
.dt
访问器作为
.dt.year

df.groupby(df.dates.year)['vi'].transform(mean)
输出:

df['dates'] = pd.to_datetime(df.dates)
df.groupby(df.dates.dt.year)['vi'].transform('mean')

您还可以将
pd.TimeGrouper
与频率
A

考虑由四年的每日数据组成的数据框架
df

0    0.530534
1    0.530534
2    0.530534
3    0.530534
4    0.530534
Name: vi, dtype: float64


使用
Grouper
功能而不是
TimeGrouper
,更新并完成@piRsquared最近版本的
pandas
(如v1.1.0)的以下示例:

df.groupby(pd.TimeGrouper('A')).mean()

                  vi
dates               
2010-12-31  0.465121
2011-12-31  0.511640
2012-12-31  0.491363
2013-12-31  0.516614

对于那些使用最新版本熊猫的人来说,时间石斑鱼已经被淘汰了。
df.groupby(pd.TimeGrouper('A')).mean()

                  vi
dates               
2010-12-31  0.465121
2011-12-31  0.511640
2012-12-31  0.491363
2013-12-31  0.516614
import pandas as pd
import numpy as np
tidx = pd.date_range('2010-01-01', '2013-12-31', name='dates')
np.random.seed([3,1415])
df = pd.DataFrame(dict(vi=np.random.rand(tidx.size)), tidx)
df.groupby(pd.Grouper(freq='1Y')).mean()