2013-08-25 3 views
1

Я сложенной ряд, который выглядит следующим образом (дата представляется в виде всего лишь месяц целого):Попытки создать столбчатую диаграмму 10 лучших выпусков в месяц

 
date issues  size       
1  issue1  1 
     issue2  2 
     issue3  1 
     issue4  6 
     issue5  1 
... 
8  issue1  1 
     issue2  2 
     issue3  1 
     issue4  6 
     issue5  1 

Я могу создать многослойный гистограмма, просто графический с

series.unstack().fillna(0) 

, но я хочу, чтобы ограничить количество вопросов только топ-10 по размеру на сегодняшний день, так как в настоящее время более 100. это является частью я не могу понять. Любая помощь приветствуется.

Edit:

Вот что мой первоначальный DataFrame выглядит для большей ясности.

 
      date issues 
0   1 issue1 
1   1 issue2 
2   1 issue3 
3   1 issue1 
4   1 issue3 
5   2 issue1 
6   2 issue2 
7   2 issue3 
... 

ответ

1

Вы можете вернуть только верхний размер объектов размер WRT по applying to each groupsort, а затем head.
Здесь мы рассмотрим только два верхних:

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 doesn't stop this, for now).

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 

Примечание: это будет произвольно выбрать, если есть связь.

+0

Извините, если я немного плотный, но эта трансформация в моей сложной серии не работает, поскольку она уже сгруппирована. Если я попытаюсь использовать исходный DataFrame, столбцы «размер» еще не сортируются. Из исходного DataFrame я сделал df.groupby (('date', 'issues')). Size(), чтобы получить серию. – Adam

+0

См. Выше для исходной структуры данных. – Adam

+0

@Adam жаль, что вы делаете это * до * стека, я собирался добавить строку в конце, говоря, что вы складываете, кричит! (Был просто исправлен баг в пандах, который требовал падения индекса :)) –