有没有办法在pandas group boxplots中设置顺序?

时间:2014-02-02 08:09:59

标签: pandas

有没有办法对熊猫中的分组箱形图进行x轴排序?看起来它按升序排序,我希望它可以根据其他列值进行排序。

1 个答案:

答案 0 :(得分:0)

如果要按类别分组,请按所需顺序将其设置为有序类别。

请参见以下示例: 这里创建了一个具有三个类别A,B和C的数据集,其中每个类别的平均值按C,B,A的顺序排列。目标是按类别的平均值绘制类别。

关键是将类别转换为具有所需顺序的有序分类数据类型。

# create some data
n = 50
a = pd.concat([pd.Series(['A']*n, name='cat'), 
               pd.Series(np.random.normal(1, 1, n), name='val')],
             axis=1)
b = pd.concat([pd.Series(['B']*n, name='cat'), 
               pd.Series(np.random.normal(.5, 1, n), name='val')],
             axis=1)
c = pd.concat([pd.Series(['C']*n, name='cat'), 
               pd.Series(np.random.normal(0, 1, n), name='val')],
             axis=1)
df = pd.concat([a, b, c]).reset_index(drop=True)

# unordered boxplot
df.boxplot(column='val', by='cat')

# get order by mean
means = df.groupby(['cat'])['val'].agg(np.mean).sort_values()
ordered_cats = means.index.values

# create categorical data type and set categorical column as new data type
cat_dtype = pd.CategoricalDtype(ordered_cats, ordered=True)
df['cat'] = df['cat'].astype(cat_dtype)

# ordered boxplot
df.boxplot(column='val', by='cat')