2015-10-02 5 views
3

Скажем, у меня есть этот dataframeПанды группы и сортировать по количеству индекса

d = {  'Path' : ['abc', 'abc', 'ghi','ghi', 'jkl','jkl'], 
      'Detail' : ['foo', 'bar', 'bar','foo','foo','foo'], 
      'Program': ['prog1','prog1','prog1','prog2','prog3','prog3'], 
      'Value' : [30, 20, 10, 40, 40, 50], 
      'Field' : [50, 70, 10, 20, 30, 30] } 


df = DataFrame(d) 
df.set_index(['Path', 'Detail'], inplace=True) 
df 
       Field Program Value 
Path Detail      
abc foo  50 prog1  30 
    bar  70 prog1  20 
ghi bar  10 prog1  10 
    foo  20 prog2  40 
jkl foo  30 prog3  40 
    foo  30 prog3  50 

я могу группировать и сортировать его по любому столбцу ...

df_count = df.groupby('Program') 
df_count.apply(lambda x: x.sort()) 

Program Path Detail Field Program Value 
prog1 abc  foo  50 prog1 30 
     ghi  foo  20 prog1 40 
     jkl  bar  10 prog1 30 
prog2 abc  bar  70 prog2 20 
prog3 ghi  foo  10 prog3 60 
     jkl  foo  30 prog3 50 

Но то, что я действительно хочу, чтобы отсортировать программы по их подсчетам

df['Program'].value_counts() 

prog1 3 
prog3 2 
prog2 1 
dtype: int64 

Что-то вроде

df_count.apply(lambda x: x.sort('Programs'.value_counts())) 

Конечная цель - построить его так, чтобы бары находились в порядке возрастания или убывания. Как я могу это сделать?

ответ

1

Вы можете просто добавить count как колонку, а затем вы можете сортировать по ней:

In [20]: 
df['count'] = df['Program'].map(df['Program'].value_counts()) 
df 

Out[20]: 
      Field Program Value count 
Path Detail        
abc foo  50 prog1  30  3 
    bar  70 prog1  20  3 
ghi bar  10 prog1  10  3 
    foo  20 prog2  40  1 
jkl foo  30 prog3  40  2 
    foo  30 prog3  50  2 

In [23]: 
df.sort('count', ascending=False) 

Out[23]: 
      Field Program Value count 
Path Detail        
abc foo  50 prog1  30  3 
    bar  70 prog1  20  3 
ghi bar  10 prog1  10  3 
jkl foo  30 prog3  40  2 
    foo  30 prog3  50  2 
ghi foo  20 prog2  40  1 
+0

Спасибо! Я знал, что это вариант, но я надеялся, что будет более элегантный способ сделать это, не добавив лишнюю колонку. – marshallbanana

+1

На самом деле вы не можете сортировать по чему-то, что не существует по существу, если вы не создали фиктивную серию/df и использовали этот индекс для переиндексации вашего df – EdChum

Смежные вопросы