Suchen Sie die eindeutigen Werte in einer Spalte und sortieren Sie sie

82

Ich habe einen Pandas-Datenrahmen. Ich möchte die eindeutigen Werte einer seiner Spalten in aufsteigender Reihenfolge drucken. So mache ich es:

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print a.sort()

Das Problem ist, dass ich eine Nonefür die Ausgabe bekomme.

MAS
quelle
4
a.sort()ändert aund gibt nichts zurück, also ersetzen durch:a.sort(); print a
stellasia

Antworten:

120

sortedGeben Sie eine neue sortierte Liste aus den Elementen in iterable zurück.

CODE

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print sorted(a)

AUSGABE

[1, 2, 3, 6, 8]
Vineet Kumar Doshi
quelle
19

sort sortiert an Ort und Stelle, gibt also nichts zurück:

In [54]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
a

Out[54]:
array([1, 2, 3, 6, 8], dtype=int64)

Sie müssen also nach dem Anruf bei print aerneut anrufen sort.

Z.B.:

In [55]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
print(a)

[1 2 3 6 8]
EdChum
quelle
11

Sie können auch drop_duplicates () anstelle von unique () verwenden.

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].drop_duplicates()
a.sort()
print a
Meloun
quelle
3
Gefunden drop_duplicates()3 mal als einzigartig schneller zu sein () auf einem Datenrahmen von 14.107.693 Zeilen [Pandas 0,18]
Fixxxer
7

Ich bevorzuge den Oneliner:

print(sorted(df['Column Name'].unique()))
MDMoore313
quelle
6

Kam heute selbst über die Frage. Ich denke, der Grund, warum Ihr Code 'None' zurückgibt (genau das, was ich mit derselben Methode erhalten habe), ist der folgende

a.sort()

ruft die Sortierfunktion auf, um die Liste zu mutieren a. Nach meinem Verständnis ist dies ein Änderungsbefehl. Um das Ergebnis zu sehen, müssen Sie print (a) verwenden.

Meine Lösung, als ich versuchte, alles in Pandas zu halten:

pd.Series(df['A'].unique()).sort_values()
Bowen Liu
quelle
Ich mag die pandasLösung, weil sie NaNWerte am Ende setzt und mit Arrays gemischter Typen funktioniert.
HS-Nebel
4

Ich würde vorschlagen, numpys Sortierung zu verwenden, da es sowieso das ist, was Pandas im Hintergrund tun:

import numpy as np
np.sort(df.A.unique())

Aber alles in Pandas zu tun ist auch gültig.

Challensois
quelle
0

Eine andere Möglichkeit ist die Verwendung des festgelegten Datentyps.

Einige Merkmale von Sets : Mengen sind ungeordnet, können gemischte Datentypen enthalten, Elemente in einer Menge können nicht wiederholt werden, sind veränderbar.

Lösen Sie Ihre Frage:

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
sorted(set(df.A))

Die Antwort im Listentyp :

[1, 2, 3, 6, 8]
Ivan Carrasco Quiroz
quelle