MultiIndex Slicing erfordert, dass der Index vollständig lexsortiert wird

8

Ich habe einen Datenrahmen mit Index ( year , foo ), wo ich die X größten Beobachtungen von foo wo year == someYear auswählen möchte.

Mein Ansatz war

%Vor%

aber ich bekomme

%Vor%

Ich habe verschiedene Sortiervarianten versucht (z. B. ascending = [0, 0] ), aber alle führten zu einer Art Fehler.

Wenn ich nur die xth -Zeile wollte, könnte ich df.groupby(level=[0]).nth(x) nach dem Sortieren, aber da ich eine Reihe von Zeilen möchte, fühlt sich das nicht ganz effizient an.

Wie wähle ich diese Zeilen am besten aus? Einige Daten zum Spielen:

%Vor%     
FooBar 05.10.2016, 14:16
quelle

4 Antworten

7

Zuerst sollten Sie wie folgt sortieren:

%Vor%

Es sollte den KeyError beheben. Aber df.loc[pd.IndexSlice[2002, :10], :] gibt Ihnen nicht das Ergebnis, das Sie erwarten. Die loc-Funktion ist nicht iloc und wird versuchen, in foo-Indizes 0,1..9 zu finden. Die sekundären Ebenen von Multiindex unterstützen iloc nicht, ich würde vorschlagen, groupby zu verwenden. Wenn Sie diesen Multiindex schon haben, sollten Sie tun:

%Vor%

Wenn Sie n Einträge mit dem kleinsten foo benötigen, können Sie tail(n) verwenden. Wenn Sie beispielsweise den ersten, dritten und fünften Eintrag benötigen, können Sie nth([0,2,4]) verwenden, wie Sie in der Frage erwähnt haben. Ich denke, es ist der effizienteste Weg, den man machen könnte.

    
Danila Savenkov 31.07.2017 08:18
quelle
2

ascending sollte ein boolescher Wert sein, keine Liste . Versuchen Sie, so zu sortieren:

df.sort_index(ascending=True, inplace=True)

    
ASGM 05.10.2016 14:41
quelle
0

Um die xth Beobachtungen der zweiten Ebene wie gewünscht zu erhalten, kann man loc mit iloc kombinieren:

%Vor%

funktioniert wie erwartet. Dies beantwortet nicht die seltsame Indexsperre w.r.t. lexsorting jedoch.

    
FooBar 05.10.2016 14:44
quelle
0

Für mich funktionierte das mit sort_index(axis=1) :

%Vor%

Sobald Sie dies getan haben, können Sie slice oder pandas.IndexSlice , z. B.:

verwenden %Vor%     
tsando 28.07.2017 16:24
quelle

Tags und Links