Как применить scipy.stats.describe к каждой группе?

1

Я был бы признателен, если бы вы могли сообщить мне, как применять 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

Я хочу вычислить сводную статистику по "Финансовому бедствию". Я имею в виду что-то вроде этого сообщения, но через 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                           

Заранее спасибо,

Теги:
pandas
python-3.x
scipy
statistics

1 ответ

1
Лучший ответ

Если вы хотите описать 3 серии независимо друг от друга по группе, кажется, вам понадобятся 3 кадра данных. Вы можете сконструировать эти dataframes и затем объединить их:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню