用rolling和shift组成的std在pandas(Python)上不起作用



考虑以下数据帧

df = pd.DataFrame()
df['Amount'] = [13,17,31,48]

我想为每一行计算列"0"的前2个值的std;金额";。例如:

  • 对于第三行,值应该是17和13的std(即2(
  • 对于第四行,该值应为std 31和17(即7(

这就是我所做的:

df['std previous 2 weeks'] = df['Amount'].shift(1).rolling(2).std()

但这是行不通的。我以为我的问题是一个索引问题。但这与求和法非常吻合。

df['total amount of previous 2 weeks'] = df['Amount'].shift(1).rolling(2).sum()

PD:我知道这可以通过其他方式实现,但我想知道为什么这不起作用(以及如何解决(。

您可以在rolling.std之后使用shift。此外,默认情况下,自由度为1,您似乎希望它为0。

df['Stdev'] = df['Amount'].rolling(2).std(ddof=0).shift()

输出:

Amount  Stdev
0      13    NaN
1      17    NaN
2      31    2.0
3      48    7.0

最新更新