[FIXED] Unterstrich vor Großbuchstaben sortieren

Ausgabe

Ich habe eine DataFramemit UPPERCASESpaltennamen aus einer Datenbank, die ich sortieren möchte. Einigen davon ist ein Unterstrich vorangestellt _. Die Standardsortierung stellt sie ans Ende. Muss ich sie in Kleinbuchstaben konvertieren, dann sortieren und dann wieder in Großbuchstaben konvertieren oder gibt es einen einfacheren Weg?

Hier sind einige Beispieldaten. Wenn die Werte von cl2klein geschrieben sind, ist die Reihenfolge korrekt . Mit Großbuchstaben nicht so sehr.

pd.DataFrame({
   "cl1": ["foo", "foo", "foo"], 
   "cl2": ["_FOO", "BAR", "BAZ"]}
).sort_values(["cl1", "cl2"])

Lösung

Wenn die Konvertierung in Kleinbuchstaben für Sie funktioniert, können Sie sie als Schlüssel verwenden:

pd.DataFrame({
   "cl1": ["foo", "foo", "foo"], 
   "cl2": ["_FOO", "BAR", "BAZ"]}
).sort_values(["cl1", "cl2"], key=lambda s: s.str.lower())

Andere Option, Sortieren nach den Zeichenfolgen ohne _, dann das Vorhandensein von _:

(pd.DataFrame({
   "cl1": ["foo", "foo", "foo"], 
   "cl2": ["_FOO", "BAR", "BAZ"]})
   .sort_values(["cl1", "cl2"], key=lambda s: s.str.lstrip('_'))
   .sort_values(["cl1", "cl2"], key=lambda s: ~s.str.startswith('_'), kind='stable')
)

Ausgang:

   cl1   cl2
0  foo  _FOO
1  foo   BAR
2  foo   BAZ


Beantwortet von –
mozway


Antwort geprüft von –
Robin (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like