python - Python 数据框中的滚动和累积标准差

标签 python pandas dataframe standard-deviation

是否有矢量化运算来计算 Python DataFrame 的累积和滚动标准差 (SD)?

例如,我想添加一个列“c”,它根据“a”列计算累积 SD,即在索引 0 中,它由于 1 个数据点而显示 NaN,而在索引 1 中,它计算基于2 个数据点,依此类推。

同样的问题也适用于滚动 SD。有没有一种无需迭代 df.itertuples() 即可有效计算的方法?

import numpy as np
import pandas as pd

def main():
    np.random.seed(123)
    df = pd.DataFrame(np.random.randn(10, 2), columns=['a', 'b'])
    print(df)

if __name__ == '__main__':
    main()

最佳答案

对于基于列“a”的累积 SD,让我们使用滚动,窗口大小为数据帧的长度,min_periods = 2:

df['a'].rolling(len(df),min_periods=2).std()

输出:

          a         b         c
0 -1.085631  0.997345       NaN
1  0.282978 -1.506295  0.967753
2 -0.578600  1.651437  0.691916
3 -2.426679 -0.428913  1.133892
4  1.265936 -0.866740  1.395750
5 -0.678886 -0.094709  1.250335
6  1.491390 -0.638902  1.374933
7 -0.443982 -0.434351  1.274843
8  2.205930  2.186786  1.450563
9  1.004054  0.386186  1.403721

对于一次基于两个值的滚动 SD:

df['c'] = df['a'].rolling(2).std()

输出:

          a         b         c
0 -1.085631  0.997345       NaN
1  0.282978 -1.506295  0.967753
2 -0.578600  1.651437  0.609228
3 -2.426679 -0.428913  1.306789
4  1.265936 -0.866740  2.611073
5 -0.678886 -0.094709  1.375197
6  1.491390 -0.638902  1.534617
7 -0.443982 -0.434351  1.368514
8  2.205930  2.186786  1.873771
9  1.004054  0.386186  0.849855

关于python - Python 数据框中的滚动和累积标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44879517/

相关文章:

python - 如何从表中选择 2 个不同的随机行?

Python while循环不稳定

python - 具有距离链接标准的sklearn凝聚聚类

Python:如何为 Pandas DataFrame 创建带有离线绘图的阶梯图?

python - Neo4j cypher 查询结果到 Pandas DataFrame

python - 按列名拆分数据框中的多索引数据框

python - 为什么 Django 会收到长 url 锁 python 的请求?

python - 如何将一个 DataFrame 列转换为包含基于另一个 DataFrame 的列的真值表?

python - 如何扩大数据框 - Pandas

python - pandas .replace 删除第一个值但不添加第二个值