熊猫滚动应用乘法

时间:2021-03-31 00:49:22

标签: pandas apply product rolling-computation

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

我正在尝试获取一个系列(或数据帧)的滚动窗口,并将该系列/数据帧的每一行乘以一个系列/数据帧的权重(这些权重已预先计算)。我认为应该工作的代码是:

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: cannot convert the series to ”。

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

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

有谁知道如何将一个系列与一个滚动系列相乘(标量)以产生一个新的滚动系列?

1 个答案:

答案 0 :(得分:0)

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