gpt4 book ai didi

python - Pandas 标准偏差返回 NaN

转载 作者:太空狗 更新时间:2023-10-29 22:15:35 25 4
gpt4 key购买 nike

我在 Python 2.7 中有以下 Pandas Dataframe。

代码:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,6),columns=list('ABCDEF'))
df.insert(0,'Category',['A','C','D','D','B','E','F','F','G','H'])
print df.groupby('Category').std()

这是df:

Category         A         B         C         D         E         F
A 0.500200 0.791039 0.498083 0.360320 0.965992 0.537068
C 0.295330 0.638823 0.133570 0.272600 0.647285 0.737942
D 0.912966 0.051288 0.055766 0.906490 0.078384 0.928538
D 0.416582 0.441684 0.605967 0.516580 0.458814 0.823692
B 0.714371 0.636975 0.153347 0.936872 0.000649 0.692558
E 0.639271 0.486151 0.860172 0.870838 0.831571 0.404813
F 0.375279 0.555228 0.020599 0.120947 0.896505 0.424233
F 0.952112 0.299520 0.150623 0.341139 0.186734 0.807519
G 0.384157 0.858391 0.278563 0.677627 0.998458 0.829019
H 0.109465 0.085861 0.440557 0.925500 0.767791 0.626924

我希望执行 GROUP_BY,然后计算平均值和标准偏差。标准偏差有时是在对 1 行进行分组后计算的 - 这意味着除以 N-1有时除以 0 将打印 NaN

下面是上面代码的输出:

输出:

                A         B         C         D         E         F
Category
A NaN NaN NaN NaN NaN NaN
B NaN NaN NaN NaN NaN NaN
C NaN NaN NaN NaN NaN NaN
D 0.350996 0.276052 0.389051 0.275708 0.269004 0.074137
E NaN NaN NaN NaN NaN NaN
F 0.407882 0.180813 0.091941 0.155699 0.501884 0.271025
G NaN NaN NaN NaN NaN NaN
H NaN NaN NaN NaN NaN NaN

对于我在 1 行上执行 GROUP_BY 的情况,有没有一种方法可以跳过标准偏差并只返回值本身。例如,我希望得到这个:

期望的输出

                 A         B         C         D         E         F
Category
A 0.500200 0.791039 0.498083 0.360320 0.965992 0.537068
B 0.714371 0.636975 0.153347 0.936872 0.000649 0.692558
C 0.295330 0.638823 0.133570 0.272600 0.647285 0.737942
D 0.350996 0.276052 0.389051 0.275708 0.269004 0.074137
E 0.639271 0.486151 0.860172 0.870838 0.831571 0.404813
F 0.407882 0.180813 0.091941 0.155699 0.501884 0.271025
G 0.384157 0.858391 0.278563 0.677627 0.998458 0.829019
H 0.109465 0.085861 0.440557 0.925500 0.767791 0.626924

用 Pandas 可以做到这一点吗?

编辑:要创建上面的 Pandas Dataframe,请选择它,复制到剪贴板,然后使用它:

import pandas as pd
df = pd.read_clipboard(index_col='Category')
print df
print df.groupby('Category').std()

最佳答案

不完全是问题中提出的问题,但如果您想避免 NaN 值,请计算总体标准偏差,用 std(ddof= 0):

>>> print(df.groupby('Category').std(ddof=0))
A B C D E F
Category
A 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
B 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
C 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
D 0.248192 0.195198 0.275101 0.194955 0.190215 0.052423
E 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
F 0.288417 0.127854 0.065012 0.110096 0.354885 0.191643
G 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
H 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

请注意 ddof(自由度增量)的不同默认值:

  • Pandas :DataFrame.std对于样本标准差(除数:N − 1)
  • ,默认 ddof=1
  • NumPy:numpy.std对于总体标准差(除数:N)
  • ,默认 ddof=0

关于python - Pandas 标准偏差返回 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32130954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com