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.


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]

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]

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

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()))

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()

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.


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]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.