Python dataframe:过去一年数据的标准差

Python dataframe: Standard deviation of last one year of data

我有 dataframe df,其中包含 10 年的每日股市,其中包含列 DateOpenClose

我想计算 close 价格的每日标准差。为此,数学公式为:

第 1 步:计算 Close

的日间变化

Step2:接下来,计算最近1年数据的每日日间变化(从Step1计算)的每日标准差

目前,我已经按照下面的代码弄清楚了Step1。 Interday_Close_change列计算每一行与一天前数值的差值

df = pd.DataFrame(data, columns=columns)
df['Close_float'] = df['Close'].astype(float)
df['Interday_Close_change'] = df['Close_float'].diff()
df.fillna('', inplace=True)

问题:

(一)。我如何获得一列 Daily_SD 来计算最近 2​​52 天(即 1 年的交易日)的标准差?在 Excel 上,我们有公式 STDEV.S() 来执行此操作。

(b)。 Daily_SD 应该从数据的第 252 行开始,因为那时数据将有 252 个数据点可供计算。我如何实现这一点?

您似乎在尝试计算滚动标准偏差,滚动 window 由之前的 252 行组成。

Pandas有很多.rolling()methods,其中一个为标准差:

df['Daily_SD'] = df['Interday_Close_change'].rolling(252).std().shift()

如果可用于计算标准偏差的行少于 252 行,则该行的结果将为空值 (NaN)。想一想你是否真的想应用 .fillna('') 方法来填充空值,就像你正在做的那样。这会将整个列从数字 (float) 数据类型转换为 object 数据类型。

如果没有 .shift() 方法,当前行的值将包含在计算中。 .shift() 方法会将所有滚动标准偏差值向下移动 1 行,因此当前行的结果将是前 252 行的标准偏差,如您所愿。

with pandas version >= 1.2 你可以用这个代替:

df['Daily_SD'] = df['Interday_Close_change'].rolling(252, closed='left').std()

closed=left 参数将从计算中排除 window 中的最后一个点。