【发布时间】:2021-06-27 00:23:27
【问题描述】:
我原以为这是pd.DataFrame().rolling() 或pd.Series().rolling() 的基本应用,但熊猫滚动函数似乎无法处理应用于滚动窗口的标量乘法;我希望我错了,有人能发现错误。
我正在尝试获取系列(或数据框)的滚动窗口,并将该系列/数据框的每一行乘以权重系列/数据框(这些权重已预先计算)。我认为应该工作的代码是:
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
我应该注意,我试图将权重相乘的唯一原因是之后对新的滚动 seres/数据框应用 corr/cov/mean 统计...类似于
rolling_weighted_corr = data.rolling(5).apply( lambda x: x*weights ).corr()
有谁知道如何将一个级数与一个滚动级数相乘(标量)以产生一个新的滚动级数?
【问题讨论】:
-
你能为更小的数据集提供预期的输出吗?
-
你想对乘法后的五行做什么?将它们相加返回一行?
-
你看过
pd.rolling_apply -
澄清一下,您是否希望将单独的 5 元素窗口乘以该权重向量?因为在滚动操作中,窗口将移动 1(而不是 5),您将得到原始系列中的相同元素乘以五个不同的值。这似乎不是你想要的。
-
所以,基本上,我想要的输出是一个新的滚动系列,它已经通过我传递给我的原始滚动系列的权重进行了调整....第一个调整后的滚动系列 = 数据 [: 5]*weights,第二次调整滚动序列=data[1:6]*weights,第三次调整滚动序列=data[2:7]*weights,以此类推。这只是一个新的滚动系列,已通过我尝试传递给原始滚动系列的权重进行了调整。一旦我有了新的滚动系列,我可以添加 .corr() 或 .mean() 来获得我想要的调整后滚动窗口的统计数据。
标签: pandas apply product rolling-computation