代码之家  ›  专栏  ›  技术社区  ›  ebrahimi

如何对每组应用scipy.stats.describe?

  •  1
  • ebrahimi  · 技术社区  · 7 年前

    如果你能告诉我如何申请,我将不胜感激 scipy.stats.describe 按组计算汇总统计。我的数据( TrainSet )是这样的:

    Financial Distress  x1       x2      x3
    0                   1.28    0.02    0.87
    0                   1.27    0.01    0.82
    0                   1.05    -0.06   0.92
    1                   1.11    -0.02   0.86
    0                   1.06    0.11    0.81
    0                   1.06    0.08    0.88
    1                   0.87    -0.03   0.79
    

    我想用“财务困境”来计算汇总数据。我是说这样的事 post 但是通过 scipy.stats.描述 因为我需要x、x2和X3的偏度和峰度。但是,我的代码不按组提供统计信息。

        desc=dict()
        for col in TrainSet.columns:
            if [TrainSet["Financial Distress"]==0]:
                desc[col] = describe(TrainSet[col]())
                df = pd.DataFrame.from_dict(desc, orient='index')
                df.to_csv("Descriptive Statistics3.csv")
    

    事实上,我需要这样的东西:

    Group                                    0                                                                 1                       
    statistics          nobs    minmax       mean   variance    skewness    kurtosis    nobs    minmax       mean   variance    skewness    kurtosis
    Financial Distress  2569    (0, 1)        0.0     0.0         4.9           22.1    50      (0, 1)        0.0     0.0         2.9         22.1
    x1                  2569    (0.1, 38)     1.4     1.7        16.5           399.9   50      (-3.6, 3.8)    0.3    0.1         0.5         21.8
    x2                  2569    (-0.2, 0.7)  0.1      0.0         1.0           1.8     50      (-0.3, 0.7)    0.1    0.0         0.9         1.2
    x3                  2569    (0.1, 0.9)   0.6      0.0        -0.5           -0.2    50      (0.1, 0.9)     0.6    0.0        -0.6         -0.3
    x4                  2569    (5.3, 6.3)    0.9     0.3         3.2           19.7    50      (-26, 38)     14.0   12.0        15.1         26.5
    x5                  2569    (-0.2, 0.8)   0.2     0.0         0.8            1.4    50      (0.3, 0.9)     0.4    0.0        0.5          -0.3
    

    或者

                nobs     minmax     mean       variance     skewness    kurtosis                            
    x1  0        5  (1.05, 1.28)    1.144      0.01433  4.073221e-01    -1.825477                               
        1        2  (0.87, 1.11)    0.990      0.02880  1.380350e-15    -2.000000                               
    
    x2  0        5   (-0.06, 0.11)    0.032      0.00437 -1.992376e-01    -1.130951                             
        1        2  (-0.03, -0.02)   -0.025      0.00005  1.058791e-15    -2.000000                             
    
    x3  0        5  (0.81, 0.92)    0.860      0.00205  1.084093e-01    -1.368531                           
        1        2  (0.79, 0.86)    0.825      0.00245  4.820432e-15    -2.000000                           
    

    提前谢谢你,

    1 回复  |  直到 7 年前
        1
  •  1
  •   jpp    7 年前

    如果您希望按组独立描述3个序列,则似乎需要3个数据帧。您可以构造这些数据帧,然后将它们连接起来:

    from scipy.stats import describe
    
    grouper = df.groupby('FinancialDistress')
    
    variables = df.columns[1:]
    
    res = pd.concat([pd.DataFrame(describe(g[x]) for _, g in grouper)\
                       .reset_index().assign(cat=x).set_index(['cat', 'index']) \
                     for x in variables], axis=0)
    
    print(res)
    
               nobs          minmax   mean  variance      skewness  kurtosis
    cat index                                                               
    x1  0         5    (1.05, 1.28)  1.144   0.01433  4.073221e-01 -1.825477
        1         2    (0.87, 1.11)  0.990   0.02880  1.380350e-15 -2.000000
    x2  0         5   (-0.06, 0.11)  0.032   0.00437 -1.992376e-01 -1.130951
        1         2  (-0.03, -0.02) -0.025   0.00005  1.058791e-15 -2.000000
    x3  0         5    (0.81, 0.92)  0.860   0.00205  1.084093e-01 -1.368531
        1         2    (0.79, 0.86)  0.825   0.00245  4.820432e-15 -2.000000