python - 按 Pandas 数据框中的多个时间单位分组

标签 python pandas

我有一个数据框,其中包含间隔为 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/

相关文章:

python - Pandas:DataFrame 的复杂转换

python - 如何在 Python 中实现向量自回归?

python - 从 pandas df 中选择特定列

python - 如何检查字符串中是否包含某个单词?

python - pandas groupby sum 需要很长时间,我该如何优化?

Python - 如何将输出文本向左/向上移动?

python - 是否有基本追踪求解器的 python 实现?

python - Travis CI 将 ü 编码为 ¼

python - pandas 按不区分大小写的两个列值过滤行

python - 这是处理命令行参数的正确方法吗?