Pandas Dataframe 中新时间序列的矢量化计算

3df52oht  于 2023-02-07  发布在  其他
关注(0)|答案(1)|浏览(132)

我有一个Pandas Dataframe ,我试图根据现有时间序列B(t)的值来估计一个新的时间序列V(t)。我已经编写了一个最小的可重复示例来生成一个样本 Dataframe ,如下所示:

import pandas as pd
import numpy as np

lenb = 5000
lenv = 200
l    = 5

B = pd.DataFrame({'a': np.arange(0, lenb, 1), 'b': np.arange(0, lenb, 1)},
                 index=pd.date_range('2022-01-01', periods=lenb, freq='2s'))

我想计算时间序列B中所有时间't'的V(t),如下所示:

V(t) = (B(t-2*l) + 4*B(t-l)+ 6*B(t)+ 4*B(t+l)+ 1*B(t+2*l))/16

我怎样才能在Pandas中以矢量化的方式执行这个计算呢?假设l=5
这样做是否正确:

def V_t(B, l):
    V = (B.shift(-2*l) + 4*B.shift(-l) + 6*B + 4*B.shift(l) + B.shift(2*l)) / 16
    return V
yjghlzjz

yjghlzjz1#

我会按照你在最新编辑中的建议去做,所以这里有一个替代方法,可以避免为一个任意长的因子/乘数列表输入所有的shift命令:

import numpy as np

def V_t(B, l):
    X = [1, 4, 6, 4, 4]
    Y = [-2*l, -l, 0, l, 2*l]
    return pd.DataFrame(np.add.reduce([x*B.shift(y) for x, y in zip(X, Y)])/16,
                        index=B.index, columns=B.columns)

相关问题