【问题标题】:Pandas rolling median for duplicate time series data重复时间序列数据的熊猫滚动中位数
【发布时间】:2012-04-03 11:13:12
【问题描述】:

我看到 Pandas 还不允许 duplicate time series indexes (https://github.com/pydata/pandas/issues/643),但很快就会添加。我想知道是否有一种好方法可以通过多索引标签/列将滚动窗口均值应用于具有重复时间的数据集

基本上,我有一个由纪元时间、分层标签(tag1、tag2)和所用时间组成的无序事件的 csv。一个小样本:

 epochTimeMS,event,tag,timeTakenMS
 1331782842801,event1,tag1,16
 1331782841535,event1,tag2,1278
 1331782842801,event1,tag1,17
 1331782842381,event2,tag1,436

我想做的是通过事件和事件+标签构建和绘制具有不同 ms 窗口的滚动方式。这似乎应该在 Pandas 中完成,但不确定我是否需要先等到重复的时间序列索引。现在有什么想法可以解决这个问题吗?

【问题讨论】:

    标签: python matplotlib pandas


    【解决方案1】:

    现在没有什么能真正阻止你:

    In [17]: idf = df.set_index(['tag', 'epochTimeMS'], verify_integrity=False).sort_index()
    
    In [18]: idf
    Out[18]: 
                         event  timeTakenMS
    tag  epochTimeMS                       
    tag1 1331782842381  event2          436
         1331782842801  event1           16
         1331782842801  event1           17
    tag2 1331782841535  event1         1278
    
    In [20]: idf.ix['tag1']
    Out[20]: 
                    event  timeTakenMS
    epochTimeMS                       
    1331782842381  event2          436
    1331782842801  event1           16
    1331782842801  event1           17
    

    通过时间戳访问特定值将导致异常(正如您所提到的,这将得到改进),但您当然可以使用数据。现在,如果您想要一个固定长度(在时间空间中)的窗口,目前还没有得到很好的支持,但我在这里创建了一个问题:

    https://github.com/pydata/pandas/issues/936

    如果您可以在邮件列表中说出您的应用程序中的 API 要求,这将对我和其他人有所帮助,因为我们现在正在积极研究时间序列功能。

    【讨论】:

    • 非常感谢您对 verify_integrity 的澄清 请耐心等待,我的数据分析术语是有限的。我是否理解正确,移动窗口时间序列数据的最小当前粒度是一天?如果我有二级数据,平均每 30 秒的数据,按标签分组,是不可能的?我应该将我的用例简单地发布到groups.google.com/group/pystatsmodels 吗?
    • 移动窗口函数是数组函数,并且在值的数量上具有固定的窗口大小——例如30 个值。所以 30 秒窗口的概念(还)没有意义。如果您在秒之间没有任何值,您可以使用asfreq(参见pandas.core.datetools)将数据重新符合第二次规则,然后使用rolling_meanwindow=30
    猜你喜欢
    • 2017-06-07
    • 2017-08-03
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2020-01-15
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多