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)

しかし、現在100を超えているため、日付ごとにサイズでトップ10に制限したいと思います。これは私が理解できない部分です。どんな助けでも大歓迎です。

編集:

わかりやすくするために、元の DataFrame は次のようになります。

          日付の問題
0 1 号1
1 1 issue2
2 1 号3
3 1 発行1
4 1 号3
5 2 号1
6 2 issue2
7 2 issue3
...
4

1 に答える 1

1

各グループソートを適用してからheadを適用することにより、サイズの大きいオブジェクトのみを返すことができます。
ここでは、上位 2 つだけを見ていきます。

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

元のデータを使用して(サイズ列なしで、1回のパスでこれを行うことができます)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 に答える