Apa perbedaan antara groupby("x").countdan groupby("x").sizepada panda?
Apakah ukuran tidak termasuk nol?
Apa perbedaan antara groupby("x").countdan groupby("x").sizepada panda?
Apakah ukuran tidak termasuk nol?
NaNnilai, harus dicatat ini adalah poin sekunder. Bandingkan keluaran dari df.groupby('key').size()dan dari df.groupby('key').count()untuk DataFrame dengan beberapa Seri. Perbedaannya jelas: countberfungsi seperti fungsi agregat lainnya ( mean, max...) tetapi sizekhusus untuk mendapatkan jumlah entri indeks dalam grup, dan oleh karena itu tidak melihat nilai dalam kolom yang tidak ada artinya untuk fungsi ini. Lihat jawaban @ cs95 untuk penjelasan yang akurat.
Jawaban:
sizetermasuk NaNnilai, counttidak:
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
Apa perbedaan antara ukuran dan jumlah pada panda?
Jawaban lain menunjukkan perbedaannya, namun tidak sepenuhnya akurat untuk mengatakan " sizemenghitung NaN sementara counttidak". Meskipun sizememang menghitung NaN, ini sebenarnya adalah konsekuensi dari fakta yang sizemengembalikan ukuran (atau panjang) objek yang dipanggil. Secara alami, ini juga termasuk baris / nilai yang merupakan NaN.
Jadi, untuk meringkas, sizekembalikan ukuran Seri / 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
... sambil countmenghitung nilai non-NaN:
df.A.count()
# 3
Perhatikan bahwa itu sizeadalah atribut (memberikan hasil yang sama dengan len(df)atau len(df.A)). countadalah sebuah fungsi.
1. DataFrame.sizejuga merupakan atribut dan mengembalikan jumlah elemen di DataFrame (baris x kolom).
GroupBy- Struktur OutputSelain perbedaan dasar, ada juga perbedaan dalam struktur output yang dihasilkan saat memanggil 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
Mempertimbangkan,
df.groupby('A').size()
A
a 3
b 2
c 3
dtype: int64
Melawan,
df.groupby('A').count()
B
A
a 2
b 0
c 2
GroupBy.countmengembalikan DataFrame saat Anda memanggil countsemua kolom, sementara GroupBy.sizemengembalikan Seri.
Alasannya sizeadalah sama untuk semua kolom, jadi hanya satu hasil yang dikembalikan. Sementara itu, countdipanggil untuk setiap kolom, karena hasilnya akan bergantung pada berapa banyak NaN yang dimiliki setiap kolom.
pivot_tableContoh lainnya adalah bagaimana pivot_tablememperlakukan data ini. Misalkan kita ingin menghitung tabulasi silang dari
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
Dengan pivot_table, Anda dapat mengeluarkan 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
Tapi counttidak berhasil; DataFrame kosong dikembalikan:
df.pivot_table(index='A', columns='B', aggfunc='count')
Empty DataFrame
Columns: []
Index: [0, 1]
Saya yakin alasannya adalah yang 'count'harus dilakukan pada rangkaian yang diteruskan ke valuesargumen, dan ketika tidak ada yang dilewatkan, panda memutuskan untuk tidak membuat asumsi.
Hanya untuk menambahkan sedikit ke jawaban @ Edchum, meskipun data tidak memiliki nilai NA, hasil count () lebih bertele-tele, menggunakan contoh sebelumnya:
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
sizesetara dengan elegan countdi panda.
Ketika kita berurusan dengan dataframe normal maka hanya perbedaan yang akan dimasukkan nilai NAN, berarti hitungan tidak termasuk nilai NAN saat menghitung baris.
Tetapi jika kita menggunakan fungsi-fungsi ini dengan groupbythen, untuk mendapatkan hasil yang benar, count()kita harus mengaitkan bidang numerik dengan the groupbyuntuk mendapatkan jumlah yang tepat dari grup di mana untuk size()jenis asosiasi ini tidak diperlukan.
Selain semua jawaban di atas, saya ingin menunjukkan satu perbedaan lagi yang menurut saya signifikan.
Anda dapat menghubungkan Datarameukuran dan jumlah Panda dengan Vectorsukuran dan panjang Java . Saat kita membuat vektor, beberapa memori yang telah ditentukan dialokasikan untuk itu. ketika kita mendekati jumlah elemen yang dapat ditempati saat menambahkan elemen, lebih banyak memori dialokasikan untuk itu. Demikian pula, DataFramesaat kita menambahkan elemen, memori yang dialokasikan padanya meningkat.
Atribut ukuran memberikan jumlah sel memori yang dialokasikan DataFramesedangkan count memberikan jumlah elemen yang sebenarnya ada DataFrame. Sebagai contoh,

Anda bisa melihat meskipun ada 3 baris DataFrame, ukurannya 6.
Jawaban ini mencakup perbedaan ukuran dan hitungan sehubungan dengan DataFramedan tidak Pandas Series. Saya belum memeriksa apa yang terjadi denganSeries