【发布时间】:2015-01-15 22:32:34
【问题描述】:
我有一个熊猫系列,像这样,
data = [1,2,3,2,4,5,6,3,5]
ds = pd.Series(data)
print (ds)
0 1
1 2
2 3
3 2
4 4
5 5
6 6
7 3
8 5
我有兴趣获取每个索引的标准差。例如,当我在索引 5 时,我想计算 ds[0:4] 的标准差。
我已经用下面的代码做到了,
df = pd.DataFrame(columns = ['data', 'avreturns', 'sd'])
df.data = data
for i in df.index:
dataslice = df.ix[0:i]
df['avreturns'].loc[i] = dataslice.data.mean()
df['sd'].loc[i] = dataslice.data.std()
print (df)
data avreturns sd
0 1 1 NaN
1 2 1.5 0.7071068
2 3 2 1
3 2 2 0.8164966
4 4 2.4 1.140175
5 5 2.833333 1.47196
6 6 3.285714 1.799471
7 3 3.25 1.669046
8 5 3.444444 1.666667
这可行,但我使用循环并且速度很慢。有没有办法将其矢量化?
我能够使用cumsum() 函数对平均计算进行矢量化:
df.data.cumsum()/(df.index+1)
有没有办法向量化标准差计算?
【问题讨论】:
标签: python pandas dataframe vectorization standard-deviation