pandas计算前N个数据帧行的rolling_std

时间:2015-08-03 08:28:52

标签: python pandas

我有一个这样的数据框:

date      A
2015.1.1  10
2015.1.2  20
2015.1.3  30
2015.1.4  40
2015.1.5  50
2015.1.6  60

我需要计算前N行的标准,例如:

date      A  std
2015.1.1  10  std(10)
2015.1.2  20  std(10,20)
2015.1.3  30  std(10,20,30)
2015.1.4  40  std(10,20,30,40)
2015.1.5  50  std(10,20,30,40,50)
2015.1.6  60  std(10,20,30,40,50,60)

pd.rolling_std用于执行此操作,如何动态更改N

df[['A']].apply(lambda x:pd.rolling_std(x,N))
<class 'pandas.core.frame.DataFrame'>
Index: 75 entries, 2015-04-16 to 2015-07-31
Data columns (total 4 columns):
A    75 non-null float64
dtypes: float64(4)
memory usage: 2.9+ KB

1 个答案:

答案 0 :(得分:1)

可以通过在df上调用apply来完成:

In [29]:
def func(x):
    return df.iloc[:x.name + 1][x.index].std()
​
df['std'] = df[['A']].apply(func, axis=1)
df
Out[29]:
       date   A        std
0  2015.1.1  10        NaN
1  2015.1.2  20   7.071068
2  2015.1.3  30  10.000000
3  2015.1.4  40  12.909944
4  2015.1.5  50  15.811388
5  2015.1.6  60  18.708287

这使用双下标[[]]在单个列的df上调用apply,这允许您传递参数axis=1,以便您可以按行调用函数,然后可以访问索引属性name和列名属性index,这样您就可以对df进行切片以计算滚动std

您可以向func添加窗口arg以根据需要修改窗口

修改

看起来您的索引是str,以下内容应该有效:

In [39]:
def func(x):
    return df.ix[:x.name ][x.index].std()
​
df['std'] = df[['A']].apply(lambda x: func(x), axis=1)
df

Out[39]:
           A        std
date                   
2015.1.1  10        NaN
2015.1.2  20   7.071068
2015.1.3  30  10.000000
2015.1.4  40  12.909944
2015.1.5  50  15.811388
2015.1.6  60  18.708287