2017-05-23 3 views
3

ich folgende Datenrahmen habe:Pandas - immer unsortiert hierarchische Spalten

import numpy as np 
import pandas as pd 
arrays = [['qux', 'qux', 'baz', 'baz', 'foo', 'foo', 'bar', 'bar'], 
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] 
tuples = zip(*arrays) 
index = pd.MultiIndex.from_tuples(tuples) 
df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index) 
print df 

Hier finden Sie die Ausgabe:

qux      baz      foo      bar 
    one   two   one   two   one   two   one   two 
A 0.504208 1.059471 1.488488 0.807279 0.788239 0.110510 0.882414 0.120483 
B 0.178940 0.099793 0.460812 -1.388569 1.264663 -0.050531 -0.839683 0.472138 
C 0.356101 -0.172082 0.859077 -0.560092 0.450147 1.200750 -0.433077 0.437339 

Wenn ich versuche, die level 0 Spalte erhalte ich die folgende bekommen:

df.columns.levels[0] 

Ausgabe:

Index([u'bar', u'baz', u'foo', u'qux'], dtype='object', name=u'first') 

Die Spalten werden sortiert. Gibt es eine Möglichkeit, die level 0 Spalte ohne Sortierung zu erhalten. Der folgende Weg:

[u'qux', u'baz', u'foo', u'bar'] 

Bitte helfen.

Antwort

4

können Sie verwenden Index.get_level_values + Index.unique:

print (df.columns.get_level_values(0).unique()) 
Index(['qux', 'baz', 'foo', 'bar'], dtype='object') 

Alternative Lösung mit Index.drop_duplicates:

print (df.columns.get_level_values(0).drop_duplicates()) 
Index(['qux', 'baz', 'foo', 'bar'], dtype='object') 
+0

ehrfürchtig. Wieder @jezrael zur Rettung .. Es hat wie Charme funktioniert. Danke vielmals. – Jeril

+0

danke für die alternative Lösung. – Jeril