Das ist der Unterschied zwischen groupby("x").count
und groupby("x").size
bei Pandas?
Schließt die Größe nur Null aus?
Das ist der Unterschied zwischen groupby("x").count
und groupby("x").size
bei Pandas?
Schließt die Größe nur Null aus?
Antworten:
size
enthält NaN
Werte, count
nicht:
In [46]:
df = pd.DataFrame({'a':[0,0,1,2,2,2], 'b':[1,2,3,4,np.NaN,4], 'c':np.random.randn(6)})
df
Out[46]:
a b c
0 0 1 1.067627
1 0 2 0.554691
2 1 3 0.458084
3 2 4 0.426635
4 2 NaN -2.238091
5 2 4 1.256943
In [48]:
print(df.groupby(['a'])['b'].count())
print(df.groupby(['a'])['b'].size())
a
0 2
1 1
2 2
Name: b, dtype: int64
a
0 2
1 1
2 3
dtype: int64
Was ist der Unterschied zwischen Größe und Anzahl bei Pandas?
Die anderen Antworten haben auf den Unterschied hingewiesen, es ist jedoch nicht ganz richtig zu sagen, " size
zählt NaNs, während count
dies nicht der Fall ist". Während size
NaNs tatsächlich gezählt werden, ist dies tatsächlich eine Folge der Tatsache, dass size
die Größe (oder die Länge) des Objekts zurückgegeben wird, auf das es aufgerufen wird. Dazu gehören natürlich auch Zeilen / Werte, die NaN sind.
Zusammenfassend size
ergibt sich also die Größe der Serie / des DataFrame 1 ,
df = pd.DataFrame({'A': ['x', 'y', np.nan, 'z']})
df
A
0 x
1 y
2 NaN
3 z
df.A.size
# 4
... während count
die Nicht-NaN-Werte gezählt werden:
df.A.count()
# 3
Beachten Sie, dass dies size
ein Attribut ist (ergibt das gleiche Ergebnis wie len(df)
oder len(df.A)
). count
ist eine Funktion.
1. DataFrame.size
ist auch ein Attribut und gibt die Anzahl der Elemente im DataFrame zurück (Zeilen x Spalten).
GroupBy
- AusgabestrukturNeben dem grundlegenden Unterschied gibt es auch den Unterschied in der Struktur der erzeugten Ausgabe beim Aufruf GroupBy.size()
vs GroupBy.count()
.
df = pd.DataFrame({'A': list('aaabbccc'), 'B': ['x', 'x', np.nan, np.nan, np.nan, np.nan, 'x', 'x']})
df
A B
0 a x
1 a x
2 a NaN
3 b NaN
4 b NaN
5 c NaN
6 c x
7 c x
Erwägen,
df.groupby('A').size()
A
a 3
b 2
c 3
dtype: int64
Gegen,
df.groupby('A').count()
B
A
a 2
b 0
c 2
GroupBy.count
Gibt einen DataFrame zurück, wenn Sie count
alle Spalten aufrufen , während GroupBy.size
eine Serie zurückgegeben wird.
Der Grund dafür size
ist , dass dies für alle Spalten gleich ist, sodass nur ein einziges Ergebnis zurückgegeben wird. In der Zwischenzeit wird das count
für jede Spalte aufgerufen, da die Ergebnisse davon abhängen würden, wie viele NaNs jede Spalte hat.
pivot_table
Ein weiteres Beispiel ist die pivot_table
Behandlung dieser Daten. Angenommen, wir möchten die Kreuztabelle von berechnen
df
A B
0 0 1
1 0 1
2 1 2
3 0 2
4 0 0
pd.crosstab(df.A, df.B) # Result we expect, but with `pivot_table`.
B 0 1 2
A
0 1 2 1
1 0 0 1
Mit pivot_table
können Sie Folgendes ausgeben size
:
df.pivot_table(index='A', columns='B', aggfunc='size', fill_value=0)
B 0 1 2
A
0 1 2 1
1 0 0 1
Funktioniert aber count
nicht; Ein leerer DataFrame wird zurückgegeben:
df.pivot_table(index='A', columns='B', aggfunc='count')
Empty DataFrame
Columns: []
Index: [0, 1]
Ich glaube, der Grund dafür ist, 'count'
dass dies für die Serie erfolgen muss, die an das values
Argument übergeben wird, und wenn nichts übergeben wird, beschließt Pandas, keine Annahmen zu treffen.
Nur um ein wenig zu @ Edchums Antwort hinzuzufügen, selbst wenn die Daten keine NA-Werte haben, ist das Ergebnis von count () anhand des vorherigen Beispiels ausführlicher:
grouped = df.groupby('a')
grouped.count()
Out[197]:
b c
a
0 2 2
1 1 1
2 2 3
grouped.size()
Out[198]:
a
0 2
1 1
2 3
dtype: int64
size
ein elegantes Äquivalent zu count
Pandas zu sein.
Wenn es sich um normale Datenrahmen handelt, besteht der einzige Unterschied darin, dass NAN-Werte einbezogen werden. Dies bedeutet, dass bei der Zählung der Zeilen keine NAN-Werte berücksichtigt werden.
Wenn wir diese Funktionen jedoch mit dem groupby
then verwenden, count()
müssen wir , um die richtigen Ergebnisse zu erhalten, ein beliebiges numerisches Feld mit dem verknüpfen groupby
, um die genaue Anzahl der Gruppen zu erhalten, size()
für die diese Art der Zuordnung nicht erforderlich ist.
Zusätzlich zu allen oben genannten Antworten möchte ich auf einen weiteren Unterschied hinweisen, der mir bedeutsam erscheint.
Sie können die Datarame
Größe und Anzahl von Panda mit der Vectors
Größe und Länge von Java korrelieren . Wenn wir einen Vektor erstellen, wird ihm ein vordefinierter Speicher zugewiesen. Wenn wir uns der Anzahl der Elemente nähern, die es beim Hinzufügen von Elementen belegen kann, wird ihm mehr Speicher zugewiesen. In ähnlicher Weise DataFrame
erhöht sich beim Hinzufügen von Elementen der ihm zugewiesene Speicher.
Das Größenattribut gibt die Anzahl der Speicherzellen an, die zugeordnet sind, DataFrame
während count die Anzahl der Elemente angibt, die tatsächlich vorhanden sind DataFrame
. Beispielsweise,
Sie können sehen, obwohl es 3 Zeilen gibt DataFrame
, seine Größe ist 6.
Diese Antwort deckt Größen- und Zählunterschiede in Bezug auf DataFrame
und nicht ab Pandas Series
. Ich habe nicht überprüft, was passiert mitSeries