2013-06-26 3 views
0

Я заинтересован в сортировке сгруппированного кадра данных по количеству записей для каждой группы. Насколько я могу судить, я могу либо сортировать по групповым ярлыкам, либо вообще нет. Скажем, у меня есть 10 записей, относящихся к трем группам. Группа А состоит из 6 членов, группа В состоит из трех членов, а группа С имеет 1 член. Теперь, когда я, например, выполните grouped.describe(), я хотел бы, чтобы результат был упорядочен, чтобы сначала отобразить группу с наибольшим количеством записей.pandas: сортировать сгруппированные данные по частоте членов группы

ответ

2

Я бы поместить значение статистики из describe(), то вы можете просто использовать sort(), так:

incsv = StringIO("""Group,Value 
B,1 
B,2 
B,3 
C,8 
A,5 
A,10 
A,15 
A,25 
A,35 
A,40""") 

df = pd.read_csv(incsv) 

groups = df.groupby('Group').describe().unstack() 

     Value             
     count  mean  std min 25% 50% 75% max 
Group               
A   6 21.666667 14.023789 5 11.25 20 32.5 40 
B   3 2.000000 1.000000 1 1.50 2 2.5 3 
C   1 8.000000  NaN 8 8.00 8 8.0 8 


dfstats.xs('Value', axis=1).sort('count', ascending=True) 

     count  mean  std min 25% 50% 75% max 
Group               
C   1 8.000000  NaN 8 8.00 8 8.0 8 
B   3 2.000000 1.000000 1 1.50 2 2.5 3 
A   6 21.666667 14.023789 5 11.25 20 32.5 40 

Я отменил то только для иллюстрации, так как он уже был отсортирован по умолчанию, но вы можете сортировать в любом случае вы хотите конечно.

Бонус для тех, кто может сортировать по счету, не отбрасывая или не укладывая уровень «Значение». :)

+2

попробуйте сделать это как ваш последний шаг: '' groups.sort ([('Value', 'count')], ascending = False) '', хотя и не уверен, что он более полезен – Jeff

+0

Определенно лучше, чем мой. xs (попытка, я не понимал, что сортировка может использовать кортежи, что приятно. –

+0

Спасибо! В дополнение к решению моей проблемы, вы также научили меня чему-то полезному в отношении панд в целом. – user857661