如何按照pandas中的中位数值对盒子图进行排序

时间:2013-10-19 18:32:48

标签: python matplotlib pandas boxplot

我有一个数据帧outcome2,我按以下方式生成一个分组的boxplot:

In [11]: outcome2.boxplot(column='Hospital 30-Day Death (Mortality) Rates from Heart Attack',by='State')
        plt.ylabel('30 Day Death Rate')
        plt.title('30 Day Death Rate by State')
Out [11]:

enter image description here

我想做的是按照每个州的中位数对地块进行排序,而不是按字母顺序排序。不确定如何去做。

1 个答案:

答案 0 :(得分:6)

要按中位数排序,只需计算中位数,然后对其进行排序,并使用生成的IndexDataFrame进行排序:

In [45]: df.iloc[:10, :5]
Out[45]:
      AK     AL     AR     AZ     CA
0  0.047  0.199  0.969 -0.205  1.053
1  0.206  0.132 -0.712  0.111 -0.254
2  0.638  0.233 -0.907  1.284  1.193
3  1.234  0.046  0.624  0.485 -0.048
4 -1.362 -0.559  1.108 -0.501  0.111
5  1.276 -0.954  0.653 -0.175 -0.287
6  0.524 -1.785 -0.887  1.354 -0.431
7  0.111  0.762 -0.514  0.808  0.728
8  1.301  0.619  0.957  1.542 -0.087
9 -0.892  2.327  1.363 -1.537  0.142

In [46]: med = df.median()

In [47]: med.sort()

In [48]: newdf = df[med.index]

In [49]: newdf.iloc[:10, :5]
Out[49]:
      PA     CT     LA     RI     MO
0 -0.667  0.774 -0.999 -0.938  0.155
1  0.822  0.390 -0.014 -2.228  0.570
2 -1.037  0.838 -0.673  2.038  0.809
3  0.620  2.845 -0.523 -0.151 -0.955
4 -0.918  1.043  0.613  0.698 -0.446
5 -0.767  0.869 -0.496 -0.925 -0.374
6 -0.495  0.437  1.245 -1.046  0.894
7 -1.283  0.358  0.016  0.137  0.511
8 -0.018 -0.047 -0.639 -0.385  0.080
9 -1.705  0.986  0.605  0.295  0.302

In [50]: med.head()
Out[50]:
PA   -0.117
CT   -0.077
LA   -0.072
RI   -0.069
MO   -0.053
dtype: float64

结果图:

enter image description here