如何按熊猫中的中值对箱线图进行排序
Posted
技术标签:
【中文标题】如何按熊猫中的中值对箱线图进行排序【英文标题】:How to sort a boxplot by the median values in pandas 【发布时间】:2013-10-28 11:20:05 【问题描述】:我有一个数据框outcome2
,我用以下方式生成了一个分组箱线图:
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]:
我想做的是按每个州的中位数对图进行排序,而不是按字母顺序。不知道该怎么做。
【问题讨论】:
“按字母顺序排列”是什么意思?您是否只想查看每个州名的第一个字母?您可以按中位数或字母顺序排序,但不能同时进行。 @PhillipCloud 错字,抱歉。默认情况下应该阅读“而不是按字母顺序”。 【参考方案1】:要按中位数排序,只需计算中位数,然后对其进行排序并使用生成的Index
对DataFrame
进行切片:
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
结果图:
【讨论】:
这是一个很好的解决方案,但是如果您的数据框中缺少任何数据,它会引发 KeyError。我希望找到解决该问题的方法。以上是关于如何按熊猫中的中值对箱线图进行排序的主要内容,如果未能解决你的问题,请参考以下文章