Pandalar arasındaki groupby("x").countve groupby("x").sizearasındaki fark bu mu?
Boyut nil'i hariç mi tutuyor?
Pandalar arasındaki groupby("x").countve groupby("x").sizearasındaki fark bu mu?
Boyut nil'i hariç mi tutuyor?
NaNdeğerleri içerdiğini veya hariç tuttuğunu belirtir , bunun ikincil bir nokta olduğuna dikkat edilmelidir. Çıktılarını karşılaştırın df.groupby('key').size()ve df.groupby('key').count()çoklu Serisi ile DataFrame için. Aradaki fark açıktır: countdiğer toplama işlevleri ( mean, max...) gibi çalışır , ancak sizegruptaki dizin girişlerinin sayısını almaya özgüdür ve bu nedenle bu işlev için anlamsız olan sütunlardaki değerlere bakmaz. Doğru bir açıklama için @ cs95 cevabına bakın .
Yanıtlar:
sizeNaNdeğerleri içerir , şunları countiçermez:
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
Pandalarda boyut ve sayı arasındaki fark nedir?
Diğer cevaplar farklılığa işaret etti, ancak " NaN'leri sayarken saymaz " demek tamamen doğru değildir. Aslında NaN'leri saymakla birlikte , bu aslında çağrıldığı nesnenin boyutunu (veya uzunluğunu) döndüren olgunun bir sonucudur . Doğal olarak bu, NaN olan satırları / değerleri de içerir.sizecountsizesize
Özetlemek gerekirse, sizeSeries / DataFrame 1'in boyutunu döndürür ,
df = pd.DataFrame({'A': ['x', 'y', np.nan, 'z']})
df
A
0 x
1 y
2 NaN
3 z
df.A.size
# 4
... while count, NaN olmayan değerleri sayar:
df.A.count()
# 3
sizeBir öznitelik olduğuna dikkat edin ( len(df)veya ile aynı sonucu verir len(df.A)). countbir işlevdir.
1. DataFrame.sizeaynı zamanda bir özniteliktir ve DataFrame'deki öğelerin sayısını döndürür (satır x sütun).
GroupBy- Çıktı YapısıTemel farkın yanı sıra, GroupBy.size()vs çağrılırken üretilen çıktının yapısında da fark vardır 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
Düşünmek,
df.groupby('A').size()
A
a 3
b 2
c 3
dtype: int64
Karşı,
df.groupby('A').count()
B
A
a 2
b 0
c 2
GroupBy.countcountTüm sütunlarda çağırdığınızda bir DataFrame GroupBy.sizedöndürürken bir Series döndürür.
Bunun nedeni sizetüm sütunlar için aynıdır, bu nedenle yalnızca tek bir sonuç döndürülür. Bu arada, countsonuçlar her sütunun kaç NaN'ye sahip olduğuna bağlı olacağından, her sütun için çağrılır.
pivot_tableBaşka bir örnek de pivot_tablebu verinin nasıl ele alındığıdır . Diyelim ki, çapraz tablolamasını hesaplamak istiyoruz
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
İle pivot_tableşunları düzenleyebilirsiniz 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
Ama countçalışmıyor; boş bir DataFrame döndürülür:
df.pivot_table(index='A', columns='B', aggfunc='count')
Empty DataFrame
Columns: []
Index: [0, 1]
Bunun sebebinin argümana 'count'aktarılan dizide yapılması gerektiğine inanıyorum valuesve hiçbir şey geçilmezse pandalar hiçbir varsayımda bulunmaya karar veriyor.
@ Edchum'un cevabına biraz eklemek için, verilerin NA değeri olmasa bile, count () 'un sonucu, önceki örneği kullanarak daha ayrıntılıdır:
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
sizezarif bir eşdeğeri gibi görünüyor count.
Normal veri çerçeveleriyle uğraşırken, tek fark NAN değerlerinin dahil edilmesi olacaktır, yani sayım satırları sayarken NAN değerlerini içermez.
Ancak bu işlevleri o zaman ile kullanıyorsak groupby, doğru sonuçları elde etmek için count()herhangi bir sayısal alanı, bu tür bir ilişkilendirmeye gerek olmayan groupbygrupların tam sayısını elde etmek size()için ile ilişkilendirmeliyiz.
Yukarıdaki tüm cevaplara ek olarak, önemli göründüğüm bir farklılığa daha dikkat çekmek isterim.
Panda'nın Datarameboyutunu ve sayısını Java'nın Vectorsboyutu ve uzunluğu ile ilişkilendirebilirsiniz. Vektör oluşturduğumuzda ona önceden tanımlanmış bir bellek tahsis edilir. Eleman eklerken işgal edebileceği eleman sayısına yaklaştığımızda, ona daha fazla bellek tahsis edilir. Benzer şekilde, DataFrameeleman ekledikçe, ona ayrılan bellek artar.
Size özniteliği, tahsis edilen bellek hücresinin DataFramesayısını verirken, count, gerçekte bulunan öğelerin sayısını verir DataFrame. Örneğin,

İçerisinde 3 sıra olmasına rağmen DataFrameboyutu 6'dır.
Bu cevap, boyut ve sayı farkına göre DataFrameve değil ile ilgili Pandas Series. Ne olduğunu kontrol etmedimSeries