Ich verwende Pandas als Datenbankersatz, da ich mehrere Datenbanken (Oracle, MSSQL usw.) habe und keine Befehlsfolge zu einem SQL-Äquivalent erstellen kann.
Ich habe eine Tabelle in einen DataFrame mit einigen Spalten geladen:
YEARMONTH, CLIENTCODE, SIZE, .... etc etc
In SQL würde die Anzahl der verschiedenen Clients pro Jahr gezählt:
SELECT count(distinct CLIENTCODE) FROM table GROUP BY YEARMONTH;
Und das Ergebnis wäre
201301 5000
201302 13245
Wie kann ich das bei Pandas machen?
value_counts
könnte die Antwort sein, die Sie suchen: pandas.pydata.org/pandas-docs/stable/generated/…Antworten:
Ich glaube, das ist was du willst:
Beispiel:
quelle
nunique
? Versuchen Sie, wie ich könnte, ich kann keinen Weg finden, da das Ergebnis dieser Antwort a istSeries
, nicht aDataFrame
.Hier ist eine andere Methode, die sehr einfach ist. Nehmen wir an, Ihr Datenrahmenname ist
daat
und der Spaltenname istYEARMONTH
quelle
DISTINCT
Anforderung aus der Frage wider ! Darüber hinaus enthält es keine Zählungen vonNaN
!Interessanterweise ist sehr oft
len(unique())
ein paar Mal (3x-15x) schneller alsnunique()
.quelle
.CLIENTCODE.apply(lambda x: len(x.unique()))
, von hierapply
Anruf mit einem Lambda fallen lassen. Zum Beispieldf.groupby('YEARMONTH')['CLIENTCODE'].apply(lambda x: x.unique().shape[0])
.len(df['column'].unique())
keine Lambda-Funktion benötigtTypeError: object of type 'method' has no len()
vonChen's
Kommentar bekommen,3novak's
für mich gearbeitet.Bei Verwendung von
crosstab
wird mehr Informationen zurückgegeben alsgroupby
nunique
Nach ein wenig Änderung erhalten Sie das Ergebnis
quelle
YEARMONTH
undcount
. Kann ich die Anzahl auch in absteigender Reihenfolge einstellen?Ich benutze auch,
nunique
aber es wird sehr hilfreich sein, wenn Sie eine Aggregatfunktion wie'min', 'max', 'count' or 'mean'
etc. verwenden müssen.quelle
Mit der neuen Pandas-Version ist es einfach, als Datenrahmen zu erhalten
quelle
Hier ein Ansatz, um die Anzahl über mehrere Spalten zu unterscheiden. Lassen Sie uns einige Daten haben:
Listen Sie nun die interessierenden Spalten auf und verwenden Sie groupby in einer leicht geänderten Syntax:
Wir erhalten:
quelle
Unterscheidung der Spalte zusammen mit Aggregationen auf anderen Spalten
Um die eindeutige Anzahl von Werten für eine Spalte (
CLIENTCODE
in Ihrem Fall) zu erhalten, können wir verwendennunique
. Wir können die Eingabe als Wörterbuch inagg
Funktion übergeben, zusammen mit Aggregationen in anderen Spalten:quelle