Pandas数据框架中的多时间单位分组

2024-06-09 02:07:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,由15秒间隔的时间序列数据组成:

date_time             value    
2012-12-28 11:11:00   103.2
2012-12-28 11:11:15   103.1
2012-12-28 11:11:30   103.4
2012-12-28 11:11:45   103.5
2012-12-28 11:12:00   103.3

数据跨越多年。我想按年份和时间分组,看看多年来日时效应的分布情况。例如,我可能想计算每天每隔15秒间隔的平均值和标准差,并查看平均值和标准差与2010、2011、2012等的变化情况。我天真地尝试了data.groupby(lambda x: [x.year, x.time]),但没有成功。我怎么能这样分组呢?


Tags: 数据lambdadatadate间隔timevalue时间
2条回答

如果date_time不是您的索引,则可以使用以下方法创建date_time索引数据帧:

dfts = df.set_index('date_time')

从那里你可以使用

dfts.groupby(lambda x : x.month).mean()

查看每个月的平均值。同样,你也可以

dfts.groupby(lambda x : x.year).std()

多年来的标准差。

如果我理解了您想要实现的示例任务,您可以使用xs将数据分成几年,对它们进行分组并连接结果,然后将其存储在一个新的DataFrame中。

years = range(2012, 2015)
yearly_month_stats = [dfts.xs(str(year)).groupby(lambda x : x.month).mean() for year in years]
df2 = pd.concat(yearly_month_stats, axis=1, keys = years)

从中你可以得到

        2012       2013       2014
       value      value      value
1        NaN   5.324165  15.747767
2        NaN -23.193429   9.193217
3        NaN -14.144287  23.896030
4        NaN -21.877975  16.310195
5        NaN  -3.079910  -6.093905
6        NaN  -2.106847 -23.253183
7        NaN  10.644636   6.542562
8        NaN  -9.763087  14.335956
9        NaN  -3.529646   2.607973
10       NaN -18.633832   0.083575
11       NaN  10.297902  14.059286
12  33.95442  13.692435  22.293245

你很亲密:

data.groupby([lambda x: x.year, lambda x: x.time])

也要确保将date_time设置为索引,如kermit666的答案所示

相关问题 更多 >