1

我有一个堆叠的系列,如下所示(日期仅表示为一个月整数):

日期问题大小                        
1 期 1 1
      问题2 2
      问题3 1
      问题4 6
      问题5 1
...
8 期 1 1
      问题2 2
      问题3 1
      问题4 6
      问题5 1

我可以通过绘制图表来创建堆积条形图

series.unstack().fillna(0)

但我想将每个日期的问题数量限制在前 10 个,因为目前有 100 多个。这是我无法弄清楚的部分。任何帮助表示赞赏。

编辑:

为了更清楚,这是我原来的 DataFrame 的样子。

          日期问题
0 1 期1
1 1 期2
2 1 期3
3 1 期1
4 1 期3
5 2 期1
6 2 期2
7 2 期 3
...
4

1 回答 1

1

您可以通过对每个组应用sort然后head来仅返回最大尺寸的对象 wrt size 。
在这里,我们只看前两个:

In [11]: top2_by_date = df.groupby('date').apply(lambda x:  x.sort('size', ascending=False).head(2))

In [12]: top2_by_date
Out[12]: 
        date  issues  size
date                      
1    3     1  issue4     6
     1     1  issue2     2
8    8     8  issue4     6
     6     8  issue2     2

令人讨厌的是,我们在索引中有日期as_index=False暂时不会停止)。

In [13]: top2_by_date.index =  top2_by_date.index.droplevel(0)

In [14]: top2_by_date
Out[14]: 
   date  issues  size
3     1  issue4     6
1     1  issue2     2
8     8  issue4     6
6     8  issue2     2

使用原始数据(没有大小列,您可以一次性完成)value_counts

In [21]: df.groupby('date').apply(lambda x: x['issues'].value_counts()[:2])
Out[21]: 
date        
1     issue3    2
      issue1    2
2     issue2    1
      issue3    1
dtype: int64

注意:如果有平局,这将任意选择。

于 2013-08-25T18:22:51.360 回答