如何按组对所有变量使用describe()?

时间:2018-06-24 08:52:38

标签: python python-3.x pandas statistics

如果您能让我知道如何应用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

我想通过“财务困境”来计算摘要统计信息,如下所示:

           count          mean       std     min     25%      50%    75%     max                            
cat index                                                                                           
x1  0         2474        1.4        1.3     0.07    0.95      1.1   1.54    38.1                           
    1         95          0.7        -1.7     0.02    2.9      2.1   1.75    11.2                           
x2  0         2474        0.9        1.7     0.02    1.9      1.4   1.75    11.2                            
    1         95          .45        1.95     0.07    2.8      1.6   2.94    20.12                          
x3  0         2474        2.4        1.5     0.07    0.85      1.2   1.3    30.1                            
    1         95          1.9        2.3     0.33    6.1      0.15   1.66    12.3

我编写了以下代码,但未提供上述格式的答案。

Statistics=pd.concat([TrainSet[TrainSet["Financial Distress"]==0].describe(),TrainSet[TrainSet["Financial Distress"]==1].describe()])
Statistics.to_csv("Descriptive Statistics1.csv")

谢谢。

coldspeed解决方案的结果:

    Financial Distress  count   mean               std
x1           0          2474    1.398623286     1.320468688
x1           1           95     1.028107053     0.360206966
x10          0          2474    0.143310534     0.136257947
x10          1           95    -0.032919408     0.080409407
x100         0          2474    0.141875505     0.348992946
x100         1           95     0.115789474     0.321669776

1 个答案:

答案 0 :(得分:2)

您可以先将DataFrameGroupBy.describeunstack一起使用,但是默认情况下,它会按reindex的顺序进行更改:

print (df)
   Financial Distress    x1    x2   x10
0                   0  1.28  0.02  0.87
1                   0  1.27  0.01  0.82
2                   0  1.05 -0.06  0.92
3                   1  1.11 -0.02  0.86
4                   0  1.06  0.11  0.81
5                   0  1.06  0.08  0.88
6                   1  0.87 -0.03  0.79

df1 = (df.groupby('Financial Distress')
         .describe()
         .unstack()
         .unstack(1)
         .reindex(df.columns[1:], level=0))

print (df1)
                        count   mean       std   min     25%    50%     75%  \
    Financial Distress                                                        
x1  0                     5.0  1.144  0.119708  1.05  1.0600  1.060  1.2700   
    1                     2.0  0.990  0.169706  0.87  0.9300  0.990  1.0500   
x2  0                     5.0  0.032  0.066106 -0.06  0.0100  0.020  0.0800   
    1                     2.0 -0.025  0.007071 -0.03 -0.0275 -0.025 -0.0225   
x10 0                     5.0  0.860  0.045277  0.81  0.8200  0.870  0.8800   
    1                     2.0  0.825  0.049497  0.79  0.8075  0.825  0.8425   

                         max  
    Financial Distress        
x1  0                   1.28  
    1                   1.11  
x2  0                   0.11  
    1                  -0.02  
x10 0                   0.92  
    1                   0.86