Ausgabe
Ich habe eine DataFrame
mit UPPERCASE
Spaltennamen 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 cl2
klein 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)