df = pd.DataFrame({'Col1': ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'],
'Col2': ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'],
'Col3': np.random.random(5)})
Was ist der beste Weg, um die eindeutigen Werte von 'Col1' und 'Col2' zurückzugeben?
Die gewünschte Ausgabe ist
'Bob', 'Joe', 'Bill', 'Mary', 'Steve'
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Antworten:
pd.unique
Gibt die eindeutigen Werte aus einem Eingabearray oder einer DataFrame-Spalte oder einem Index zurück.Die Eingabe für diese Funktion muss eindimensional sein, sodass mehrere Spalten kombiniert werden müssen. Am einfachsten ist es, die gewünschten Spalten auszuwählen und dann die Werte in einem abgeflachten NumPy-Array anzuzeigen. Die ganze Operation sieht so aus:
Beachten Sie, dass dies
ravel()
eine Array-Methode ist, die (wenn möglich) eine Ansicht eines mehrdimensionalen Arrays zurückgibt. Das Argument'K'
weist die Methode an, das Array in der Reihenfolge zu reduzieren, in der die Elemente im Speicher gespeichert sind (Pandas speichert normalerweise zugrunde liegende Arrays in fortlaufender Fortran-Reihenfolge ; Spalten vor Zeilen). Dies kann erheblich schneller sein als bei Verwendung der Standardreihenfolge 'C' der Methode.Eine alternative Möglichkeit besteht darin, die Spalten auszuwählen und an folgende Adresse zu übergeben
np.unique
:Hier ist keine Verwendung erforderlich,
ravel()
da die Methode mehrdimensionale Arrays verarbeitet. Dies ist jedoch wahrscheinlich langsamer alspd.unique
die Verwendung eines sortierungsbasierten Algorithmus anstelle einer Hashtabelle zur Identifizierung eindeutiger Werte.Der Geschwindigkeitsunterschied ist bei größeren DataFrames erheblich (insbesondere wenn nur eine Handvoll eindeutiger Werte vorhanden sind):
quelle
pd.DataFrame(unique_values)
. Es gibt keine gute Möglichkeit, einen DataFrame direkt zurückzugewinnen.Ich habe ein
DataFrame
mit ein paar einfachen Zeichenfolgen in den Spalten eingerichtet:Sie können die Spalten, an denen Sie interessiert sind, verketten und die
unique
Funktion aufrufen :quelle
Oder:
quelle
Eine aktualisierte Lösung mit numpy v1.13 + erfordert die Angabe der Achse in np.unique, wenn mehrere Spalten verwendet werden. Andernfalls wird das Array implizit reduziert .
Diese Änderung wurde im November 2016 eingeführt: https://github.com/numpy/numpy/commit/1f764dbff7c496d6636dc0430f083ada9ff4e4be
quelle
Nichtlösung
pandas
: mit set ().Ausgabe:
quelle
Für diejenigen von uns, die alles lieben, Pandas, gelten und natürlich Lambda-Funktionen:
quelle
Hier ist ein anderer Weg
quelle
Die Ausgabe wird ['Mary', 'Joe', 'Steve', 'Bob', 'Bill'] sein.
quelle