与均匀地间隔的时间序列数据工作

问题描述 投票:0回答:2

我与具有时间戳,事件持续时间,和平均值的数据集工作。我想将数据重新取样到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
...

纠正了我desiared输出将是:

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
...

一个想法我是手动上取样数据创建系列中的每一个第二的纪录,但是这似乎是非常低效的。任何提示,将不胜感激。

python pandas time-series
2个回答
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()

0
投票

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

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

display(result)
© www.soinside.com 2019 - 2024. All rights reserved.