我有一个数据框,其中包含间隔为 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])
但它没有用。我怎样才能做这样的分组?
最佳答案
如果 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
关于python - 按 Pandas 数据框中的多个时间单位分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14301004/