【问题标题】:Better way to aggregate timestamped data?聚合时间戳数据的更好方法?
【发布时间】:2013-11-07 02:59:56
【问题描述】:

我正在处理非统一收集的时间戳索引数据,最终将按每分钟、每小时计算统计数据。我想知道按时间段聚合的最佳方法是什么。

我目前计算两个 lambda 函数,然后将两列添加到数据框中,如下所示:

h = lambda i: pd.to_datetime(i.strftime('%Y-%m-%d %H:00:00'))
m = lambda i: pd.to_datetime(i.strftime('%Y-%m-%d %H:%M:00'))
df['hours'] = df.index.map(h)
df['minutes'] = df.index.map(m)

这让我可以像这样轻松地与groupby 聚合:

by_hour = df.groupby('hours')

我确信有更好或更 Pythonic 的方式来做到这一点,但我还没有弄清楚,希望能提供任何帮助。

【问题讨论】:

    标签: python pandas ipython


    【解决方案1】:

    你有几个使用 pandas 的选项。对于简单的统计,您可以在具有日期时间索引的 DataFrame/Series 上使用 resample 方法。

    In [35]: ts
    Out[35]: 
    2012-01-01 00:00:00    127
    2012-01-01 00:00:01    452
    2012-01-01 00:00:02    231
    2012-01-01 00:00:03    434
    2012-01-01 00:00:04    139
    2012-01-01 00:00:05    223
    2012-01-01 00:00:06    409
    2012-01-01 00:00:07    101
    2012-01-01 00:00:08      3
    2012-01-01 00:00:09    393
    2012-01-01 00:00:10    208
    2012-01-01 00:00:11    416
    2012-01-01 00:00:12    136
    2012-01-01 00:00:13    343
    2012-01-01 00:00:14    387
    ...
    2012-01-01 00:01:25    307
    2012-01-01 00:01:26    267
    2012-01-01 00:01:27    199
    2012-01-01 00:01:28    479
    2012-01-01 00:01:29    423
    2012-01-01 00:01:30    334
    2012-01-01 00:01:31    442
    2012-01-01 00:01:32    282
    2012-01-01 00:01:33    289
    2012-01-01 00:01:34    166
    2012-01-01 00:01:35      4
    2012-01-01 00:01:36    306
    2012-01-01 00:01:37    165
    2012-01-01 00:01:38    415
    2012-01-01 00:01:39    316
    Freq: S, Length: 100
    
    In [37]: ts.resample('t', how='mean')
    Out[37]: 
    2012-01-01 00:00:00    270.166667
    2012-01-01 00:01:00    221.400000
    Freq: T, dtype: float64
    

    为了更灵活,您可以按时间戳对象的hour(或分钟、秒等)属性进行分组:

    In [38]: g = ts.groupby(lambda x: x.minute)
    
    In [39]: g
    Out[39]: <pandas.core.groupby.SeriesGroupBy object at 0x107045150>
    

    查看有关重采样的文档:http://pandas.pydata.org/pandas-docs/dev/timeseries.html#up-and-downsampling

    【讨论】:

    • 重采样正是我想要的。不敢相信我以前没见过。
    • pandas 是一个大图书馆!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2020-07-28
    • 2018-03-08
    相关资源
    最近更新 更多