由滚动和移位组成的标准不适用于 pandas (Python)
std composed with rolling and shift is not working on pandas (Python)
考虑以下数据框
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()
但这不起作用。我以为我的问题是索引问题。但这与 sum 方法完美配合。
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
考虑以下数据框
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()
但这不起作用。我以为我的问题是索引问题。但这与 sum 方法完美配合。
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