【问题标题】:rolling_sum for irregular time series in pandas?熊猫中不规则时间序列的rolling_sum?
【发布时间】:2013-10-09 03:12:12
【问题描述】:

我有一个不规则采样的时间序列,我想在上面使用像 pandas.stats.moments.rolling_sum 这样的函数。

不幸的是,该函数看起来只能返回“x”个样本,而不是“x”秒。

不知道如何解决这个问题……对 pandas 来说还很陌生。

我的数据看起来像

time     value
0.000    0.0000
0.013    0.0134
0.023    0.0256
0.035    0.0423
0.049    0.0756
0.069    0.0998

【问题讨论】:

  • 这些是 timedelta 时间吗?浮点型时间,还是实际时间(日期型)?
  • 时间增量,从零开始。我正在使用 pandas 来分析物理测试的数据。
  • ok...下面的解决方案,因为我们不为此 ATM 提供 timedelta 支持。您也可以使用 groupby 来执行此操作,但我认为会更慢

标签: pandas time-series


【解决方案1】:

这是一种做我认为你想做的事情的方法

In [34]: df = read_csv(StringIO(data),sep='\s+')

创建一个datelike-index(这里假设你的意思是秒,需要转换成ns添加到日期)

In [35]: df['time'] = pd.to_datetime([Timestamp('20130101').value + v*1e9 for v in df['time'] ])

In [36]: df.set_index('time',inplace=True)

In [37]: df
Out[37]: 
                             value
time                              
2013-01-01 00:00:00         0.0000
2013-01-01 00:00:00.012999  0.0134
2013-01-01 00:00:00.023000  0.0256
2013-01-01 00:00:00.035000  0.0423
2013-01-01 00:00:00.048999  0.0756
2013-01-01 00:00:00.068999  0.0998

使结果符合 20ms,滚动 20 个周期,没有最小值

In [38]: pd.rolling_sum(df,20,0,freq='20ms')
Out[38]: 
                              value
time                               
2013-01-01 00:00:00         0.00670
2013-01-01 00:00:00.020000  0.04065
2013-01-01 00:00:00.040000  0.11625
2013-01-01 00:00:00.060000  0.21605

【讨论】:

  • 为什么会被接受?这不是不规则时间的滚动总和。
猜你喜欢
  • 2013-03-03
  • 1970-01-01
  • 2019-03-18
  • 2014-02-05
  • 2016-04-07
  • 1970-01-01
  • 2011-04-23
  • 2019-08-10
  • 1970-01-01
相关资源
最近更新 更多