Python 处理间隔不均匀的时间序列数据

Python 处理间隔不均匀的时间序列数据,python,pandas,time-series,Python,Pandas,Time Series,我使用的数据集具有时间戳、事件持续时间和平均值。我想将数据重新采样为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

我使用的数据集具有时间戳、事件持续时间和平均值。我想将数据重新采样为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
...

我的一个想法是手动增加数据采样,每秒钟在序列中创建一个记录,但这似乎效率极低。任何提示都将不胜感激。

如果您想要值/时间单位,您应该先将一个除以另一个

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()

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

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

display(result)

您的示例输出没有任何意义。我搞不懂你为什么说你想以15秒和60秒的间隔重新采样,但随后以30秒的间隔重新采样并显示输出。@PaulH感谢你在我的问题中发现了一个错误。我已经更新了输出部分,我认为这将起作用,只是为了确保我理解。1.将该值转换为该间隔2的值。重新采样以添加缺失的间隔60->30,30 3。pad将使用现在正确的值,并将其复制到新的空间隔