Python数据帧: Standard deviation of last one year of data

标签 python pandas dataframe standard-deviation

我有 10 年每日股市数据框 df,其中包含 DateOpenClose 列。

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

第一步:计算收盘价每日日间变化

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

目前,我已经按照下面的代码弄清楚了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)

问题:

(a)。如何获取 Daily_SD 列来查找过去 252 天(即 1 年的交易日)的标准差?在 Excel 上,我们使用公式 STDEV.S() 来执行此操作。

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

enter image description here

最佳答案

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

Pandas 有很多 .rolling() methods ,包括标准差:

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

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

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

对于 pandas 版本 >= 1.2,您可以使用它:

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

close=left 参数将从计算中排除窗口中的最后一个点。

关于Python数据帧: Standard deviation of last one year of data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72251703/

相关文章:

python - 如何严格地将 float 转换为整数而不四舍五入?

python - 从字符串中提取完整的国家/地区名称并将其作为数据框列

python - pandas 通过排除日期范围对 DatetimeIndex 进行过滤

python - Pandas - 自上次交易以来的计数

python - 查找重复行,将某一列乘以重复行数,删除重复行

python - 属性错误: 'module' object has no attribute 'ValueError'

python - Spark 读取二进制文件的子组

python - 超越 Python 中 rx 的基础知识

python - pyplot 不导入,抛出错误

python - 有条件地将几列替换为 Pandas 中的默认值