簡體   English   中英

熊貓標准偏差返回 NaN

[英]Pandas Standard Deviation returns NaN

我在 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 數據框,請選擇它,復制到剪貼板,然后使用:

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 (Delta 自由度)的不同默認值:

  • Pandas: DataFrame.std樣本標准差默認為ddof=1 (除數: N − 1)
  • NumPy:numpy.std總體標准偏差默認為ddof=0 (除數: N

您可以fillna來替換缺失值 - 使用每個組的最后一個值傳入DataFrame

In [86]: (df.groupby('Category').std()
    ...:    .fillna(df.groupby('Category').last()))

Out[86]: 
                 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.269005  0.074137
E         0.639271  0.486151  0.860172  0.870838  0.831571  0.404813
F         0.407883  0.180813  0.091941  0.155699  0.501884  0.271024
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM