Py学习  »  Python

由滚动和轮班组成的std不适用于熊猫(Python)

Román • 4 年前 • 2317 次点击  

考虑下面的数据文件

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

我想计算每一行“金额”列前两个值的标准差。例如:

  • 对于第三行,该值应为17和13的标准值(即2)。
  • 对于第四行,该值应为标准值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:我知道这可以通过其他方式实现,但我想知道这不起作用的原因(以及如何修复)。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130086
文章 [ 1 ]  |  最新文章 4 年前
enke
Reply   •   1 楼
enke    4 年前

你可以 shift 之后 rolling.std 。此外,默认情况下自由度为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