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%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:
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.
ascending
sollte ein boolescher Wert sein, keine Liste . Versuchen Sie, so zu sortieren:
df.sort_index(ascending=True, inplace=True)