Dokumentasi mengatakan, ukuran itu "mengembalikan jumlah elemen dalam NDFrame", dan menghitung "Seri mengembalikan dengan jumlah observasi non-NA / null di atas sumbu yang diminta. Bekerja dengan data non-floating point juga (mendeteksi NaN dan None)"
hamsternik
1
Jawaban yang diterima menyatakan perbedaannya termasuk atau tidak termasuk 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.
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
0011.0676271020.5546912130.4580843240.42663542 NaN -2.2380915241.256943
In [48]:
print(df.groupby(['a'])['b'].count())
print(df.groupby(['a'])['b'].size())
a
021122
Name: b, dtype: int64
a
021123
dtype: int64
Saya pikir hitungan itu juga mengembalikan DataFrame sementara ukuran Seri?
Mr_and_Mrs_D
1
Fungsi .size () mendapatkan nilai agregat dari kolom tertentu hanya sementara .column () digunakan untuk setiap kolom.
Nachiket
Ukuran @Mr_and_Mrs_D mengembalikan integer
boardtc
@boardtc df.size mengembalikan angka - metode groupby dibahas di sini, lihat tautan dalam pertanyaan.
Mr_and_Mrs_D
Adapun pertanyaan saya - jumlah dan ukuran memang mengembalikan DataFrame dan Seri masing-masing ketika "terikat" ke contoh DataFrameGroupBy - dalam pertanyaan terikat ke SeriesGroupBy sehingga mereka berdua mengembalikan contoh Seri
Mr_and_Mrs_D
29
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).
Perilaku dengan GroupBy- Struktur Output
Selain 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.
Perilaku dengan pivot_table
Contoh lainnya adalah bagaimana pivot_tablememperlakukan data ini. Misalkan kita ingin menghitung tabulasi silang dari
df
A B
001101212302400
pd.crosstab(df.A, df.B) # Result we expect, but with `pivot_table`.
B 012
A
01211001
Dengan pivot_table, Anda dapat mengeluarkan size:
df.pivot_table(index='A', columns='B', aggfunc='size', fill_value=0)
B 012
A
01211001
Tapi counttidak berhasil; DataFrame kosong dikembalikan:
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
022111223
grouped.size()
Out[198]:
a
021123
dtype: int64
@ QM.py TIDAK, ini bukan. Alasan perbedaan groupbyoutput dijelaskan di sini .
cs95
1
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
NaN
nilai, harus dicatat ini adalah poin sekunder. Bandingkan keluaran daridf.groupby('key').size()
dan daridf.groupby('key').count()
untuk DataFrame dengan beberapa Seri. Perbedaannya jelas:count
berfungsi seperti fungsi agregat lainnya (mean
,max
...) tetapisize
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
termasukNaN
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
sumber
Jawaban lain menunjukkan perbedaannya, namun tidak sepenuhnya akurat untuk mengatakan "
size
menghitung NaN sementaracount
tidak". Meskipunsize
memang menghitung NaN, ini sebenarnya adalah konsekuensi dari fakta yangsize
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 denganlen(df)
ataulen(df.A)
).count
adalah sebuah fungsi.1.
DataFrame.size
juga merupakan atribut dan mengembalikan jumlah elemen di DataFrame (baris x kolom).Perilaku dengan
GroupBy
- Struktur OutputSelain perbedaan dasar, ada juga perbedaan dalam struktur output yang dihasilkan saat memanggil
GroupBy.size()
vsGroupBy.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 memanggilcount
semua kolom, sementaraGroupBy.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.Perilaku dengan
pivot_table
Contoh lainnya adalah bagaimana
pivot_table
memperlakukan data ini. Misalkan kita ingin menghitung tabulasi silang daridf 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 mengeluarkansize
: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 kevalues
argumen, dan ketika tidak ada yang dilewatkan, panda memutuskan untuk tidak membuat asumsi.sumber
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
sumber
size
setara dengan elegancount
di panda.groupby
output dijelaskan di sini .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 thegroupby
untuk mendapatkan jumlah yang tepat dari grup di mana untuksize()
jenis asosiasi ini tidak diperlukan.sumber
Selain semua jawaban di atas, saya ingin menunjukkan satu perbedaan lagi yang menurut saya signifikan.
Anda dapat menghubungkan
Datarame
ukuran dan jumlah Panda denganVectors
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 adaDataFrame
. Sebagai contoh,Anda bisa melihat meskipun ada 3 baris
DataFrame
, ukurannya 6.Jawaban ini mencakup perbedaan ukuran dan hitungan sehubungan dengan
DataFrame
dan tidakPandas Series
. Saya belum memeriksa apa yang terjadi denganSeries
sumber