熊猫滚动应用乘法



我本以为这将是pd.DataFrame().rolling()pd.Series().rolling()的基本应用程序,但Panda滚动函数似乎无法处理应用于滚动窗口的标量乘法;我希望我错了,有人能发现错误。

我试图取一个序列(或数据帧(的滚动窗口,将该序列/数据帧的每一行乘以一个序列/数据框架的权重(这些权重已经预先计算好(。我认为应该工作的代码是:

data.rolling(5).apply( lambda x: x*weights )

带有

data = pd.Series( np.random.randint(1,101,2000) )
weights = pd.Series([ 0.10650, 0.1405310, 0.1854318, 0.2446788, 0.3228556 ])

我原以为data.rolling(5(.apply(lambda x:x*weights(会产生一个新的滚动系列,但每次"都会返回以下错误;TypeError:无法将序列转换为<类"float">";。

我应该注意的是,我试图乘以权重的唯一原因是在之后对新的滚动序列/数据帧应用corr/cov/mean统计。。。类似的东西

rolling_weighted_corr  = data.rolling(5).apply( lambda x: x*weights ).corr()

有人知道如何将一个级数与一个滚动级数相乘以产生一个新的滚动级数吗?

Scipy可以使用signal.convolve来完成此操作。例如,使用mode="same"标志将返回与data大小相同的数组,其中每行周围的居中窗口乘以权重并求和(因此,np.sum(weights)用于归一化(。示例:

from scipy import signal
data_smoothed = signal.convolve(data, weights, mode="same")/np.sum(weights)

np.var(data) # 836.0666897499997
np.var(data_smoothed) # 185.52213418878418

最新更新