Apa perbedaan antara groupby("x").count
dan groupby("x").size
pada panda?
Apakah ukuran tidak termasuk nol?
Apa perbedaan antara groupby("x").count
dan groupby("x").size
pada panda?
Apakah ukuran tidak termasuk nol?
NaN
nilai, 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: count
berfungsi seperti fungsi agregat lainnya ( mean
, max
...) tetapi size
khusus 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:
size
termasuk NaN
nilai, count
tidak:
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 " size
menghitung NaN sementara count
tidak". Meskipun size
memang menghitung NaN, ini sebenarnya adalah konsekuensi dari fakta yang size
mengembalikan ukuran (atau panjang) objek yang dipanggil. Secara alami, ini juga termasuk baris / nilai yang merupakan NaN.
Jadi, untuk meringkas, size
kembalikan 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 count
menghitung nilai non-NaN:
df.A.count()
# 3
Perhatikan bahwa itu size
adalah atribut (memberikan hasil yang sama dengan len(df)
atau len(df.A)
). count
adalah sebuah fungsi.
1. DataFrame.size
juga 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.count
mengembalikan DataFrame saat Anda memanggil count
semua kolom, sementara GroupBy.size
mengembalikan Seri.
Alasannya size
adalah sama untuk semua kolom, jadi hanya satu hasil yang dikembalikan. Sementara itu, count
dipanggil untuk setiap kolom, karena hasilnya akan bergantung pada berapa banyak NaN yang dimiliki setiap kolom.
pivot_table
Contoh lainnya adalah bagaimana pivot_table
memperlakukan 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 count
tidak 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 values
argumen, 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
size
setara dengan elegan count
di 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 groupby
then, untuk mendapatkan hasil yang benar, count()
kita harus mengaitkan bidang numerik dengan the groupby
untuk 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 Datarame
ukuran dan jumlah Panda dengan Vectors
ukuran 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, DataFrame
saat kita menambahkan elemen, memori yang dialokasikan padanya meningkat.
Atribut ukuran memberikan jumlah sel memori yang dialokasikan DataFrame
sedangkan 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 DataFrame
dan tidak Pandas Series
. Saya belum memeriksa apa yang terjadi denganSeries