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()))
Конечная цель - построить его так, чтобы бары находились в порядке возрастания или убывания. Как я могу это сделать?
Спасибо! Я знал, что это вариант, но я надеялся, что будет более элегантный способ сделать это, не добавив лишнюю колонку. – marshallbanana
На самом деле вы не можете сортировать по чему-то, что не существует по существу, если вы не создали фиктивную серию/df и использовали этот индекс для переиндексации вашего df – EdChum