我有以下dataframe:
a b c
day
1 2 2 8
2 1 2 2
3 7 2 3
4 2 9 7
5 4 6 4
我想得到一个新的列(“std”),它包含所有列值的扩展标准差。NaN应该被忽略。这是预期的输出:
a b c std
day
1 2 2 8 2.828427
2 1 2 2 2.339278
3 7 2 3 2.346524
4 2 9 7 2.782635
5 4 6 4 2.542090
例如,2.339278等于numpy.std([2,2,8,1,2,2])
我尝试了以下方法:
df['std'] = df.reset_index().groupby('day').expanding().std()
但导致以下TypeError:插入列与框架索引不相容索引
有人帮忙吗?谢谢
4条答案
按热度按时间sdnqo3pr1#
一种更快的方法,基于扁平数组的 * 扩展 *:
执行时间比较:
pgky5nke2#
一种方法是
stack
+expanding
+std
+ index每三个值,但这意味着你也计算中间体的std:df
:wxclj1h53#
试试这个:
输出:
kzmpq1sx4#
如果数据中有NaN,示例也应该这样。
示例
df
编码
df