如何将scipy.stats.describe应用于每个组?

时间:2018-06-23 18:00:03

标签: python python-3.x pandas scipy statistics

如果您能让我知道如何应用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.describe,因为我需要按组分别针对x1,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 个答案:

答案 0 :(得分:1)

如果您希望按组分别描述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