跳转至

Python

Python 实现多列滚动计算——以“更优波动率”为例

对单列数据进行滚动计算,可以使用常规的.rolling()

如果需要对多列数据进行滚动计算,可以考虑下面两种方法:

  1. 引入外部包numpy_ext,使用其中的rollling_apply()方法。
  2. .rolling()中加入参数method='table'

本文以方正金工发表的一篇研报中提出的计算“更优波动率”为例,实现了对多列数据进行滚动计算,并对上述两种方法总结如下:

  1. numpy_ext.rollling_apply()需要引入外部包numpy_ext,该方法接受需要进行滚动计算的多个 Series,并返回计算出的一个数组。
  2. .rolling(method='table')是 Pandas 内置的函数(需要升级到较新的版本),指定method='table'后,就可以对数据框中的多列进行滚动计算,并返回一个数据框。若返回的多列结果相同,我们只需要取出其中一列即可。
  3. .rolling(method='table')使用了engine='numba',计算速度更快。

修改 Jupyter Notebook 的默认 Python 解释器

Conda 可以十分方便地创建虚拟环境,便于在不同的项目中使用不同的 Python 版本、外部包等。今天在创建新的虚拟 Conda 环境后,在 VS Code 中没有找到刚刚创建的 Python 解释器。

解决方案是:

  1. 先按Ctrl+Shift+P,调出Select Interpreter选项,这里应该可以看到最新创建的 Conda 环境;
  2. 再按Ctrl+Shift+P,调出Clear Cache and Reload Window选项,重新加载窗口;
  3. 最后点击右上角的“选择内核”,可以看到刚才创建的环境。

pandas 中的 axis

pandas 中的axis参数代表对数据进行处理时遵循的方向。在单行、单列操作(如drop)时,axis=0axis=1分别代表删除行和删除列。在聚合操作(如求mean)时,axis=0axis=1分别代表求列均值和行均值。

总结

  • axis=0

如果是单行操作,就指的是某一行;

如果是聚合操作,指的是跨行 cross rows。

  • axis=1

如果是单列操作,就指的是某一列;

如果是聚合操作,指的是跨列 cross columns。

在 pandas 中计算方差

pandas 默认的.var()方法计算的是样本方差,即自由度为\(N-1\)。若想计算总体方差,需指定参数ddof=0(1)。

  1. Delta Degrees of Freedom。当指定ddof时,计算方差的分母为N-ddof

总结

  • pandas 中的var()默认的自由度是 n-1,即var(ddof=1)
  • NumPy 中的var()默认的自由度是 n,即var(ddof=0)
  • pandas 中的var(ddof=0)相当于 NumPy 中的 var()