如何在seaborn中对轴进行排序,以便显示具有最多值的类别

时间:2016-02-23 20:36:53

标签: python pandas seaborn

我有一个大约有320条记录的数据集。其中,我希望通过计数在x轴(本例中为Refined_ID)中显示该类别的前20个实体的swarmplot。怎么能实现这一目标?例如,如果我的数据是:

Refined_ID Refined_Age Name
e123        21         foo1
f123        19         bar1
z123        26         foo2
f123        29         bar2
e123        20         foo1
e1342       19         bar3
f123        20         foo3

我希望我的x轴排序为:

e123 f123 z123   

这是我的代码:

g = sns.swarmplot(x = dfAnalysis['Refined_ID'].iloc[:20],y = dfAnalysis['Refined_Age'], hue = dfAnalysis['Name'], orient="v")
g.set_xticklabels(g.get_xticklabels(),rotation=30)

由于数据帧非常大,我将视图限制为前20行进行测试。

更新1

假设没有一种方法可以动态地对seaborn中的轴进行排序,这就是我想要输出的样子:

Refined_ID Refined_Age     Name   Count_of_Refined_ID
    e123        21         foo1     2
    f123        19         bar1     3
    z123        26         foo2     1
    f123        29         bar2     3
    e123        20         foo1     3
    e1342       19         bar3     1
    f123        20         foo3     3

从这个数据框中,我想根据他们的计数绘制前两个Refined_ID。在这种情况下,这两个类别将是e123f123。情节将有:

x-axis: Refined ID (e123 and f123)
y-axis: Refined_Age (0 to 30)
Hue: Based on Name

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

counts = df['Refined_ID'].value_counts()
ix = (df['Refined_ID'].apply(lambda x: counts[x])
      .sort_values(ascending=False).index)
df.reindex(ix)

  Refined_ID  Refined_Age  Name
6       f123           20  foo3
3       f123           29  bar2
1       f123           19  bar1
4       e123           20  foo1
0       e123           21  foo1
5      e1342           19  bar3
2       z123           26  foo2