我的数据框由时间序列数据组成,间隔为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])
但是它不起作用。我怎么做这样的分组?
答案 0 :(得分:16)
如果date_time
不是您的索引,则可以使用以下内容创建date_time
- 索引的DataFrame:
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
答案 1 :(得分:4)