Ich habe einen Pandas DataFrame mit Indizes, die ich natürlich sortieren möchte. Natsort scheint nicht zu funktionieren. Das Sortieren der Indizes vor dem Erstellen des DataFrame scheint nicht hilfreich zu sein, da die Manipulationen, die ich mit dem DataFrame mache, die Sortierung im Prozess durcheinander bringen. Irgendwelche Gedanken darüber, wie ich die Indizes natürlich aufgreifen kann?
%Vor%Wenn Sie das df sortieren wollen, sortieren Sie einfach den Index oder die Daten und weisen Sie direkt dem Index des df zu, anstatt zu versuchen, das df als arg zu übergeben, da dies eine leere Liste ergibt:
%Vor% Beachten Sie, dass df.index = natsorted(df.index)
auch funktioniert
Wenn Sie das df als arg übergeben, ergibt es eine leere Liste, in diesem Fall, weil das df leer ist (hat keine Spalten), sonst gibt es die sortierten Spalten zurück, die nicht das sind, was Sie wollen:
%Vor%BEARBEITEN
Wenn Sie den Index so sortieren möchten, dass die Daten zusammen mit dem Index neu geordnet werden, verwenden Sie reindex
:
Beachten Sie, dass Sie das Ergebnis von reindex
entweder einem neuen df oder sich selbst zuweisen müssen, das inplace
param nicht akzeptiert.
Die akzeptierte Antwort beantwortet die gestellte Frage. Ich möchte auch hinzufügen, wie natsort
für Spalten in einem DataFrame
verwendet wird, da dies die nächste Frage sein wird.
Wie die akzeptierte Antwort zeigt, ist die Sortierung nach dem Index ziemlich einfach:
%Vor% Wenn Sie auf dieselbe Weise nach einer Spalte sortieren möchten, müssen Sie den Index nach der Reihenfolge sortieren, in der die gewünschte Spalte neu angeordnet wurde. natsort
stellt die Komfortfunktionen index_natsorted
und order_by_index
zur Verfügung, um genau das zu tun.
Wenn Sie eine beliebige Anzahl von Spalten (oder eine Spalte und den Index) neu anordnen möchten, können Sie zip
(oder itertools.izip
auf Python2) verwenden, um die Sortierung für mehrere Spalten anzugeben. Die erste Spalte wird die primäre Sortierspalte sein, dann sekundär, dann tertiär, usw. ...
Hier ist eine alternative Methode, die Categorical
-Objekte verwendet, die mir von pandas
devs mitgeteilt wurde, ist der "richtige" Weg, dies zu tun. Dies erfordert (soweit ich sehen kann) Pandas & gt; = 0,16,0. Momentan funktioniert es nur für Spalten, aber scheinbar in Pandas & gt; = 0.17.0 fügen sie CategoricalIndex
hinzu, was es erlaubt, diese Methode für einen Index zu verwenden.
Mit dem Objekt Categorical
können Sie eine Sortierreihenfolge definieren, die DataFrame
verwendet. Die beim Aufruf von reorder_categories
angegebenen Elemente müssen eindeutig sein, daher der Aufruf von set
für Spalte "b".
Ich überlasse es dem Benutzer zu entscheiden, ob das besser ist als die Methode reindex
oder nicht, da Sie die Spaltendaten unabhängig voneinander sortieren müssen, bevor Sie in DataFrame
sortieren (obwohl ich mir vorstelle, dass die zweite Sortierung eher ist effizient).
Vollständige Offenlegung, ich bin der natsort
Autor.
Tags und Links python python-2.7 pandas sorting natsort