我有以下pandas数据框,其中包含约5分钟的日内数据。市场开盘当天(美国东部标准时间9:30),DeltaBetweenClose是第一个交易条的NaN
。
time Date symbol DeltaBetweenClose
9:35 2017-07-17 spy NaN
9:40 2017-07-17 spy -1.2
..........................................
..........................................
16:00 2018-07-17 spy 1.7
9:35 2017-07-18 spy NaN
9:40 2017-07-18 spy 0.3
..........................................
..........................................
9:35 2018-07-17 nflx NaN
我正在尝试创建一列CloseDelta_sd
,该列将计算DeltaBetweenClose
分组的symbol
列的滚动标准偏差,该列将查找前30个小节,并在忽略{的情况下计算标准偏差{1}}个。我的以下尝试返回所有NaN
。当NaN
列的顶部只有一个NaN
时,它起作用。
DeltaBetweenClose
答案 0 :(得分:1)
此问题与std
无关,因为默认情况下会跳过NaN
,而与rolling
无关。
您需要使用min_periods
参数:
在一个窗口中必须具有值的最小观察数(否则结果为NA)。对于由偏移量指定的窗口,它将默认为1。
由于您提供的是int
而不是偏移量,因此最终会有很多NaN
组,因此修复很简单:
(df.groupby('symbol').DeltaBetweenClose
.transform(lambda x: x.rolling(30, min_periods=1).std()))