我正在使用具有时间戳记,事件持续时间和平均值的数据集。我想以15s和60s的间隔重新采样数据。问题是时间戳记间隔不均匀。
这是到目前为止我得到的:
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
...
我的想法是手动对数据进行升采样,从而每秒在系列中创建一条记录,但这似乎效率很低。任何提示将不胜感激。
答案 0 :(得分: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 :(得分:0)
我使用的是建议答案的优化版本:
interval = 15
df['mean_value'] = df['value'] / (df['length'].dt.seconds / interval)
result = df['mean_value'].resample(f'{interval}s').pad()
display(result)