我有一个非常简单的数据集,只有一个“价格”和“滚动”列。
Price Roll
209265 558180.0 8
209266 558195.0 16
209267 558185.0 18
209268 558120.0 11
209269 558075.0 6
209270 558160.0 6
209271 558140.0 17
209272 558085.0 17
209273 558110.0 14
209274 558160.0 16
209275 558210.0 19
209276 558185.0 11
209277 558180.0 12
209278 558150.0 8
209279 558135.0 15
209280 558135.0 17
209281 558295.0 10
209282 558375.0 18
209283 558520.0 15
209284 558515.0 7
我想做的是使用Roll的值并在滚动窗口中获取Price的均值。像这样:
df['Mean'] = df['Price'].rolling(df['Roll']).mean()
ValueError: window must be an integer
有没有一种快速的方法?
答案 0 :(得分:0)
请注意,滚动需要一个恒定窗口大小,而您需要 为每行分别定义的窗口大小。
所以我认为唯一的选择就是这样:
定义一个计算滚动平均价格的函数:
def getRollPrice(i, roll):
return df.Price.iloc[i : i + roll].mean()
参数:
然后通过以下方式调用此函数:
i = 0
rollPrice = []
for _, row in df.iterrows():
rollPrice.append(getRollPrice(i, int(row.Roll)))
i += 1
df = df.assign(RollPrice=rollPrice)
此构造至少包含以下优化: