【问题标题】:Working with unevenly spaced time series data使用不均匀间隔的时间序列数据
【发布时间】:2019-02-05 15:57:02
【问题描述】:

我正在使用具有时间戳、事件持续时间和平均值的数据集。我想将数据重新采样为 15 秒和 60 秒的间隔。问题是时间戳间隔不均匀。

这是我目前得到的:

from datetime import datetime
import pandas as pd

df = pd.DataFrame([dict(length=pd.to_timedelta(30, unit='s'), value=10),
                   dict(length=pd.to_timedelta(90, unit='s'), value=30),
                   dict(length=pd.to_timedelta(180, unit='s'), value=60),
                   dict(length=pd.to_timedelta(30, unit='s'), value=10)],
                  index=[datetime(2000, 1, 1),
                         datetime(2000, 1, 1, 0, 0, 30),
                         datetime(2000, 1, 1, 0, 3, 0),
                         datetime(2000, 1, 1, 0, 6, 0)])
print(df.resample('30s').mean())

样本输出:

timestamp           value
2000-01-01 00:00:00 10.0
2000-01-01 00:00:30 30.0
2000-01-01 00:01:00 NaN
...

已更正 我想要的输出是:

print(df.resample('15s').mean())

timestamp           value
2000-01-01 00:00:00 5.0
2000-01-01 00:00:15 5.0
2000-01-01 00:00:30 5.0
2000-01-01 00:00:45 5.0
2000-01-01 00:01:00 5.0
...


print(df.resample('60s').mean())

timestamp           value
2000-01-01 00:00:00 20.0
2000-01-01 00:01:00 20.0
2000-01-01 00:02:00 20.0
...

我的一个想法是手动对数据进行上采样,每秒在系列中创建一条记录,但这似乎效率极低。任何提示将不胜感激。

【问题讨论】:

  • 您的示例输出没有任何意义。我很困惑为什么你说你想重新采样到 15 秒和 60 秒的时间间隔,然后重新采样并显示 30 秒的时间间隔的输出。
  • @PaulH 感谢您在我的问题中发现错误。我已经更新了输出部分

标签: python pandas time-series


【解决方案1】:

如果你想要价值/时间单位,你应该先除以另一个。

interval = 30
df['mean_value'] = (df['value']/df['length'].apply(lambda x: x.total_seconds()/interval))
result = df['mean_value'].resample(str(interval)+'s').pad()

【讨论】:

  • 我认为这会起作用,只是为了确保我理解。 1. 将值转换为该区间的值 2. 重新采样以添加缺失的区间 (60 -> 30, 30) 3. pad 将使用现在正确的值并将其复制到新的空区间
【解决方案2】:

我正在使用建议的答案的优化版本:

interval = 15
df['mean_value'] = df['value'] / (df['length'].dt.seconds / interval)
result = df['mean_value'].resample(f'{interval}s').pad()

display(result)

【讨论】:

    猜你喜欢
    • 2022-08-03
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2017-01-09
    相关资源
    最近更新 更多