Pandas df.sort_values()-Funktion
df.sort_values()Es ist eine Funktion in Pandas, mit der DataFrame-Daten nach einer oder mehreren Spalten sortiert werden.
Sortieren ist eine grundlegende Operation in der Datenanalyse, die Ihnen hilft, Daten besser zu verstehen und Muster zu entdecken.sort_values()Es unterstützt das Sortieren nach einer einzelnen Spalte oder mehreren Spalten, in aufsteigender oder absteigender Reihenfolge und kann mit fehlenden Werten umgehen. Es ist ein unverzichtbares Werkzeug in der Datenverarbeitung.
Grundlegende Syntax und Parameter
sort_values()Es ist eine Member-Funktion von DataFrame, die über den Punktoperator aufgerufen wird.zum Aufrufen.
Syntaxformat
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
Parameterbeschreibung
| Parameter | Type | Erforderlich? | Beschreibung | Standardwert |
|---|---|---|---|---|
| von | str oder Liste von str | Erforderlich | Gibt den/die für die Sortierung verwendeten Spaltennamen an. Wenn es sich um eine Liste handelt, wird gemäß der Reihenfolge in der Liste sortiert. | Keine |
| axis | int oder str | Optional | Gibt die Achse für die Sortierung an.0oder'index'0 bedeutet nach Spalten sortieren (Standard);1oder'columns'1 bedeutet, nach Zeilen zu sortieren. |
0 |
| ascending | bool oder Liste von bool | Optional | Gibt die Sortierreihenfolge an.TrueTrue bedeutet aufsteigend (von klein nach groß);FalseFalse bedeutet absteigend (von groß nach klein). Wenn es eine Liste ist, stimmt sie eins zu eins mitbyden Spalten im Parameter 'by' überein. |
True |
| inplace | bool | Optional | Wenn TrueTrue, verändert es das ursprüngliche DataFrame direkt und gibt kein neues Objekt zurück; wenn FalseFalse, gibt es ein neues DataFrame zurück, und die ursprünglichen Daten bleiben unverändert. |
False |
| kind | str | Optional | Gibt den Sortieralgorithmus an.'quicksort''quicksort' (Quicksort),'mergesort''mergesort' (Mergesort),'heapsort''heapsort' (Heap-Sortierung),'stable''stable' (stabile Sortierung). |
'quicksort' |
| na_position | str | Optional | Gibt die Position fehlender Werte (NaN) an.'first''first' bedeutet, am Anfang platziert zu werden;'last''last' bedeutet, am Ende platziert zu werden. |
'last' |
| ignore_index | bool | Optional | Wenn TrueTrue, setzt es den sortierten Index zurück, Nummerierung ab 0; wenn FalseFalse, behält es den ursprünglichen Index bei. |
False |
| key | callable | Optional | Wendet eine Funktion auf die Daten vor dem Sortieren an, die häufig für benutzerdefinierte Sortierregeln verwendet wird. | Keine |
Beschreibung des Rückgabewerts
- Gibt ein neues DataFrame zurück (wenn
inplace=False), oderNone(wenninplace=True)。 - Das zurückgegebene DataFrame wurde gemäß den angegebenen Regeln sortiert.
Beispiele
Lass uns gründlich meisternsort_values()die Verwendung von df.sort_values().
Beispiel 1: Nach einer einzelnen Spalte in aufsteigender Reihenfolge sortieren
Die einfachste Verwendung ist, aufsteigend nach den Werten einer Spalte zu sortieren.
Beispiel
# Erstelle einen DataFrame mit Studentennoten
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
Mathematik: [85, 92, 78, 90, 88],
Englisch: [90, 85, 92, 88, 78]
}
df = pd.DataFrame(data)
print(“Rohdaten:”)
print(df)
print("=" * 50)
# Aufsteigend nach Mathematik-Punktzahl sortieren
df_sorted = df.sort_values(by=Mathematics)
print(Nach Sortierung nach Mathematik-Punktzahlen in aufsteigender Reihenfolge:)
print(df_sorted)
Erwartete Ausgabe:
原始数据: 姓名 数学 英语 0 张三 85 90 1 李四 92 85 2 王五 78 92 3 赵六 90 88 4 钱七 88 78 ================================================== 按数学成绩升序排序后: 姓名 数学 英语 2 王五 78 92 0 张三 85 90 4 钱七 88 78 3 赵六 90 88 1 李四 92 85
Code-Erklärung:
- Die Standardsortierreihenfolge ist aufsteigend (von klein nach groß).
- Die Mathematik-Punktzahl 78 steht an erster Stelle und 92 an letzter Stelle.
- Nach dem Sortieren bleibt der Index unverändert (2, 0, 4, 3, 1).
Beispiel 2: Nach einer einzelnen Spalte in absteigender Reihenfolge sortieren
Verwenden Sieascending=Falseum eine absteigende Sortierung zu erreichen.
Beispiel
# Erstelle einen DataFrame mit Studentennoten
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
Mathematik: [85, 92, 78, 90, 88],
Englisch: [90, 85, 92, 88, 78]
}
df = pd.DataFrame(data)
print(“Rohdaten:”)
print(df)
print("=" * 50)
# Absteigend nach Mathematikpunktzahl sortieren
df_sorted = df.sort_values(by=Mathematics, ascending=False)
print(Nach dem Sortieren nach Mathematikpunkten in absteigender Reihenfolge:)
print(df_sorted)
Erwartete Ausgabe:
原始数据: 姓名 数学 英语 0 张三 85 90 1 李四 92 85 2 王五 78 92 3 赵六 90 88 4 钱七 88 78 ================================================== 按数学成绩降序排序后: 姓名 数学 英语 1 李四 92 85 3 赵六 90 88 4 钱七 88 78 0 张三 85 90 2 王五 78 92
Code-Erklärung:
- Verwenden Sie
ascending=Falsekann eine absteigende Sortierung von groß nach klein erreichen. - Li Sis Mathematikpunktzahl von 92 wird an erster Stelle platziert.
Beispiel 3: Nach mehreren Spalten sortieren
Sie können nach mehreren Spalten sortieren: Zuerst nach der ersten Spalte sortieren, und wenn die erste Spalte gleich ist, nach der zweiten Spalte sortieren.
Beispiel
# Erstelle einen DataFrame mit Studentennoten
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
Class: [Class 1, Class 2, Class 1, Class 2, Class 1],
Mathematik: [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data)
print(“Rohdaten:”)
print(df)
print("=" * 50)
# Zuerst nach Klasse, dann nach Mathematikpunktzahl sortieren (beide aufsteigend)
df_sorted = df.sort_values(by=[Class, Mathematics])
print("Nach der Sortierung zuerst nach Klasse, dann nach Mathematikpunktzahl:")
print(df_sorted)
print("=" * 50)
# Nach Klasse aufsteigend, Mathematikpunktzahl absteigend sortieren
df_sorted2 = df.sort_values(by=[Class, Mathematics], ascending=[True, False])
print(Nach Klasse aufsteigend, Mathematikpunktzahl absteigend sortieren:)
print(df_sorted2)
Erwartete Ausgabe:
原始数据: 姓名 班级 数学 0 张三 一班 85 1 李四 二班 92 2 王五 一班 78 3 赵六 二班 90 4 钱七 一班 88 ================================================== 先按班级,再按数学成绩排序后: 姓名 班级 数学 2 王五 一班 78 0 张三 一班 85 4 钱七 一班 88 3 赵六 二班 90 1 李四 二班 92 ================================================== 按班级升序,数学成绩降序: 姓名 班级 数学 4 钱七 一班 88 0 张三 一班 85 2 王五 一班 78 1 李四 二班 92 3 赵六 二班 90
Code-Erklärung:
- Verwenden Sie eine Liste
by=['班级', '数学']um nach mehreren Spalten zu sortieren. - Zuerst nach "class" sortieren, wobei Class 1 vorne und Class 2 dahinter steht.
- Innerhalb derselben Klasse zusätzlich nach der "math"-Punktzahl sortieren.
- Verwenden Sie
ascending=[True, False]um unterschiedliche Sortierrichtungen für verschiedene Spalten festzulegen.
Beispiel 4: Sortieren mit fehlenden Werten
Verwenden Siena_positionParameter zur Steuerung der Position fehlender Werte.
Beispiel
import numpy as np
# Erstelle einen DataFrame mit fehlenden Werten
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
'Score': [85, np.nan, 92, 78]
}
df = pd.DataFrame(data)
print(“Rohdaten:”)
print(df)
print("=" * 50)
# Standard: fehlende Werte werden zuletzt platziert
df_sorted_last = df.sort_values(by='Score')
print("Fehlende Werte ans Ende gesetzt:")
print(df_sorted_last)
print("=" * 50)
# Fehlende Werte zuerst platzieren
df_sorted_first = df.sort_values(by='Score', na_position='first')
print("Fehlende Werte an den Anfang gesetzt:")
print(df_sorted_first)
Erwartete Ausgabe:
原始数据: 姓名 成绩 0 张三 85.0 1 李四 NaN 2 王五 92.0 3 赵六 78.0 ================================================== 缺失值放在最后: 姓名 成绩 3 赵六 78.0 0 张三 85.0 2 王五 92.0 1 李四 NaN ================================================== 缺失值放在最前: 姓名 成绩 1 李四 NaN 3 赵六 78.0 0 张三 85.0 2 王五 92.0
Code-Erklärung:
- Standardmäßig (
na_position='last'), werden fehlende Werte zuletzt platziert. - Set
na_position='first', und fehlende Werte werden zuerst platziert.
Beispiel 5: Zurücksetzen des Index nach dem Sortieren
Nach dem Sortieren kann der Index nicht fortlaufend sein; Sie könnenignore_index=Trueverwenden, um den Index zurückzusetzen.
Beispiel
# DataFrame erstellen
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu'],
'Score': [85, 92, 78]
}
df = pd.DataFrame(data)
print(“Rohdaten:”)
print(df)
print("=" * 50)
# Sortieren ohne Zurücksetzen des Index
df_sorted = df.sort_values(by='Score')
print(Nach dem Sortieren (ursprüngliche Indizes beibehalten):)
print(df_sorted)
print("=" * 50)
# Sortieren und Index zurücksetzen
df_sorted_reset = df.sort_values(by='Score', ignore_index=True)
print(Nach dem Sortieren (Index zurückgesetzt):)
print(df_sorted_reset)
Erwartete Ausgabe:
原始数据: 姓名 成绩 0 张三 85 1 李四 92 2 王五 78 ================================================== 排序后(保留原始索引): 姓名 成绩 2 王五 78 0 张三 85 1 李四 92 ================================================== 排序后(重置索引): 姓名 成绩 0 王五 78 1 张三 85 2 李四 92
Code-Erklärung:
- Verwendung
ignore_index=TrueDanach wird der Index beginnend bei 0 neu nummeriert. - Das ist praktischer, wenn Sie später über den Index auf Daten zugreifen müssen.
Beispiel 6: Benutzerdefiniertes Sortieren mit dem key-Parameter
keyDer Parameter ermöglicht es Ihnen, vor dem Sortieren eine benutzerdefinierte Funktion auf die Daten anzuwenden.
Beispiel
# Erstellen Sie ein DataFrame, das eine Mischung aus Zeichenfolgen in Groß- und Kleinschreibung enthält
data = {
'Word': ['apple', 'Banana', 'cherry', 'APPLE', 'banana']
}
df = pd.DataFrame(data)
print(Originaldaten:)
print(df)
print("=" * 50)
# Alphabetisch in aufsteigender Reihenfolge sortieren (Groß-/Kleinschreibung beachten)
df_sorted_case = df.sort_values(by='Word')
print(Alphabetisch aufsteigend (Groß-/Kleinschreibung beachten):)
print(df_sorted_case)
print("=" * 50)
# key-Parameter verwenden, um eine Sortierung ohne Beachtung der Groß-/Kleinschreibung zu erreichen
df_sorted_nocase = df.sort_values(by='Word', key=lambda x: x.str.lower())
print(Alphabetisch aufsteigend (Groß-/Kleinschreibung wird nicht beachtet):)
print(df_sorted_nocase)
Erwartete Ausgabe:
原始数据:
单词
0 apple
1 Banana
2 cherry
3 APPLE
4 banana
==================================================
按字母升序(区分大小写):
单词
3 APPLE
0 apple
1 Banana
4 banana
2 cherry
==================================================
按字母升序(不区分大小写):
单词
0 apple
3 APPLE
1 Banana
4 banana
2 cherry
Code-Erklärung:
- Standardmäßig wird bei der Sortierung die Groß-/Kleinschreibung beachtet, wobei Großbuchstaben vor Kleinbuchstaben stehen.
- Verwendung
key=lambda x: x.str.lower()Alle Zeichenfolgen werden vor dem Sortieren in Kleinbuchstaben umgewandelt, wodurch eine Sortierung ohne Beachtung der Groß-/Kleinschreibung erreicht wird.
Beispiel 7: In-place-Modifikation unter Verwendung des inplace-Parameters
Verwendunginplace=TrueSie können direkt am ursprünglichen DataFrame Änderungen vornehmen.
Beispiel
# DataFrame erstellen
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu'],
'Score': [85, 92, 78]
}
df = pd.DataFrame(data)
print(Originaldaten:)
print(df)
print(fUrsprüngliche Daten-ID: {id(df)})
print("=" * 50)
# In-place sortieren mit inplace=True
df.sort_values(by='Score', inplace=True)
print(Nach dem Sortieren mit inplace=True:)
print(df)
print(fSortierte Daten-ID: {id(df)})
Erwartete Ausgabe:
原始数据: 姓名 成绩 0 张三 85 1 李四 92 2 王五 78 原始数据 id: 140234567890 ================================================== 使用 inplace=True 排序后: 姓名 成绩 2 王五 78 0 张三 85 1 李四 92 排序后数据 id: 140234567890 # 同一个对象
Code-Erklärung:
- Verwendung
inplace=Trueanschließend wird das DataFrame selbst geändert und kein neues Objekt zurückgegeben. - Die id vor und nach dem Sortieren
idsind gleich, was darauf hinweist, dass es dasselbe Objekt ist. - Diese Methode kann Speicher sparen, aber sie wird die ursprünglichen Daten ändern.
Hinweise
sort_values()Standardmäßig wird ein neuer DataFrame zurückgegeben und die Originaldaten werden nicht geändert. Um an Ort und Stelle zu ändern, verwenden Sieinplace=Trueden Parameter.- Die Sortieroperation wird nicht an Ort und Stelle durchgeführt (sofern nicht anders angegeben
inplace=True), der ursprüngliche DataFrame bleibt unverändert. - Verwendung
ignore_index=Truekann den Index zurücksetzen, was bei der nachfolgenden Datenverarbeitung bequemer ist. keyDer Parameter ist sehr leistungsfähig und kann verschiedene benutzerdefinierte Sortierungen implementieren, wie z. B. ohne Berücksichtigung der Groß-/Kleinschreibung, Sortierung nach absolutem Wert usw.- Beim Sortieren nach mehreren Spalten,
ascendingkann der Parameter eine Liste sein, die eins zu eins mitbyden Spalten in ... übereinstimmt
Weitere Erweiterungen
Pandas Häufige Funktionen