Ich habe einen Datenrahmen df
und verwende mehrere Spalten daraus, um groupby
:
df['col1','col2','col3','col4'].groupby(['col1','col2']).mean()
Auf die obige Weise bekomme ich fast die Tabelle (Datenrahmen), die ich brauche. Was fehlt, ist eine zusätzliche Spalte, die die Anzahl der Zeilen in jeder Gruppe enthält. Mit anderen Worten, ich habe gemein, aber ich würde auch gerne wissen, wie viele Zahlen verwendet wurden, um diese Mittel zu erhalten. Zum Beispiel gibt es in der ersten Gruppe 8 Werte und in der zweiten 10 Werte und so weiter.
Kurz gesagt: Wie erhalte ich gruppenweise Statistiken für einen Datenrahmen?
df[['col1','col2','col3','col4']].groupby(['col1','col2']).agg(['mean', 'count'])
count
Spalte pro Gruppe erhalten möchten .result = df['col1','col2','col3','col4'].groupby(['col1', 'col2']).mean() ; counts = times.groupby(['col1', 'col2']).size() ; result['count'] = counts
Schnelle Antwort:
Der einfachste Weg, um die Anzahl der Zeilen pro Gruppe zu ermitteln, ist ein Aufruf
.size()
, der Folgendes zurückgibtSeries
:Normalerweise möchten Sie dieses Ergebnis als
DataFrame
(anstelle vonSeries
), damit Sie Folgendes tun können:Wenn Sie herausfinden möchten, wie die Zeilenanzahl und andere Statistiken für jede Gruppe berechnet werden, lesen Sie weiter unten.
Detailliertes Beispiel:
Betrachten Sie den folgenden Beispieldatenrahmen:
Lassen Sie
.size()
uns zuerst die Zeilenanzahl ermitteln:Dann verwenden wir
.size().reset_index(name='counts')
, um die Zeilenanzahl zu erhalten:Einschließlich Ergebnisse für weitere Statistiken
Wenn Sie Statistiken zu gruppierten Daten berechnen möchten, sieht dies normalerweise folgendermaßen aus:
Das obige Ergebnis ist aufgrund der verschachtelten Spaltenbeschriftungen und auch der Zeilenanzahl pro Spalte etwas ärgerlich.
Um mehr Kontrolle über die Ausgabe zu erhalten, teile ich die Statistiken normalerweise in einzelne Aggregationen auf, die ich dann mit kombiniere
join
. Es sieht aus wie das:Fußnoten
Der zum Generieren der Testdaten verwendete Code wird unten gezeigt:
Haftungsausschluss:
Wenn einige der Spalten, die Sie aggregieren, Nullwerte haben, möchten Sie wirklich die Anzahl der Gruppenzeilen als unabhängige Aggregation für jede Spalte betrachten. Andernfalls werden Sie möglicherweise irregeführt, wie viele Datensätze tatsächlich zur Berechnung des Mittelwerts verwendet werden, da Pandas
NaN
Einträge in der Mittelwertberechnung löschen, ohne Sie darüber zu informieren.quelle
In [5]: counts_df = pd.DataFrame(df.groupby('col1').size().rename('counts'))
, vielleicht ist es besser, die Größe () als neue Spalte festzulegen, wenn Sie den Datenrahmen für die weitere Analyse manipulieren möchten, die sein solltecounts_df = pd.DataFrame(df.groupby('col1').size().reset_index(name='counts')
isnull
diese Abfrage ergänzen können, damit sie auch in einer Spalte angezeigt wird?'col4': ['median', 'min', 'count', 'isnull']
Eine Funktion, um sie alle zu regieren:
GroupBy.describe
Returns
count
,mean
,std
und andere nützliche Statistiken pro-Gruppe.Um bestimmte Statistiken zu erhalten, wählen Sie sie einfach aus.
describe
funktioniert für mehrere Spalten (ändern Sie['C']
zu['C', 'D']
- oder entfernen Sie es ganz - und sehen Sie, was passiert. Das Ergebnis ist ein MultiIndexed-Spalten-Datenrahmen).Sie erhalten auch verschiedene Statistiken für Zeichenfolgendaten. Hier ist ein Beispiel:
Weitere Informationen finden Sie in der Dokumentation .
quelle
Wir können es einfach tun, indem wir groupby und count verwenden. Wir sollten jedoch daran denken, reset_index () zu verwenden.
quelle
Um mehrere Statistiken zu erhalten, reduzieren Sie den Index und behalten Sie die Spaltennamen bei:
Produziert:
quelle
Erstellen Sie ein Gruppenobjekt und rufen Sie Methoden wie im folgenden Beispiel auf:
quelle
Bitte versuchen Sie diesen Code
Ich denke, dieser Code fügt eine Spalte mit dem Namen "count it" hinzu, die für jede Gruppe zählt
quelle