2015-04-19 4 views
0

Я ищу способ сортировки кадра данных с несколькими индексами на основе одного из индексов. Вот пример ...Pandas MultiIndex Data Frame Сортировка

У меня есть ...

mi = pd.MultiIndex.from_tuples([('baz', 'y'), ('foo', 'y'), ('bar', 'y'), ('baz', 'z'), ('foo', 'z'), ('bar', 'z')],names=['first','second']) 
df = pd.DataFrame(np.random.randn(6),index=mi) 
print df 

который производит

first second   
baz y  1.902902 
foo y  -0.128341 
bar y  0.481100 
baz z  -2.185144 
foo z  1.015320 
bar z  -1.624616 

Если я делаю ...

df2 = df.sort() 

я получаю:

print df2 

first second   
bar y  0.481100 
     z  -1.624616 
baz y  1.902902 
     z  -2.185144 
foo y  -0.128341 
     z  1.015320 

Как-то Df такая, что я получаю:

first second   
baz y  1.902902 
     z  -2.185144 
foo y  -0.128341 
     z  1.015320 
bar y  0.481100 
     z  -1.624616 
+0

Как это " сортировка по одному из индексов "? Как вы решаете, что «база» предшествует «бару»? – BrenBarn

+0

Потому что база появилась перед баром в исходных данных. Я не хочу сначала менять порядок. – agf1997

+2

DataFrames не содержит понятия «первоначальный заказ». Если порядок в исходных данных имеет смысл для вас, создайте еще один столбец (или индексный уровень), который содержит эту информацию. – BrenBarn

ответ

0

Я не знаю, как бар сортируется после обув, но я думаю, что это то, что вы хотите:

df.sortlevel(0) 

        0 
first second   
bar y  -0.114659 
     z  0.453896 
baz y  -0.327006 
     z  0.685782 
foo y  0.444256 
     z  -0.167179 
Смежные вопросы