Pandalar arasındaki groupby("x").count
ve groupby("x").size
arasındaki fark bu mu?
Boyut nil'i hariç mi tutuyor?
Pandalar arasındaki groupby("x").count
ve groupby("x").size
arasındaki fark bu mu?
Boyut nil'i hariç mi tutuyor?
NaN
değ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: count
diğer toplama işlevleri ( mean
, max
...) gibi çalışır , ancak size
gruptaki 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:
size
NaN
değerleri içerir , şunları count
iç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.size
count
size
size
Özetlemek gerekirse, size
Series / 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
size
Bir öznitelik olduğuna dikkat edin ( len(df)
veya ile aynı sonucu verir len(df.A)
). count
bir işlevdir.
1. DataFrame.size
aynı 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.count
count
Tüm sütunlarda çağırdığınızda bir DataFrame GroupBy.size
döndürürken bir Series döndürür.
Bunun nedeni size
tüm sütunlar için aynıdır, bu nedenle yalnızca tek bir sonuç döndürülür. Bu arada, count
sonuçlar her sütunun kaç NaN'ye sahip olduğuna bağlı olacağından, her sütun için çağrılır.
pivot_table
Başka bir örnek de pivot_table
bu 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 values
ve 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
size
zarif 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 groupby
grupları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 Datarame
boyutunu ve sayısını Java'nın Vectors
boyutu 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, DataFrame
eleman ekledikçe, ona ayrılan bellek artar.
Size özniteliği, tahsis edilen bellek hücresinin DataFrame
sayısını verirken, count, gerçekte bulunan öğelerin sayısını verir DataFrame
. Örneğin,
İçerisinde 3 sıra olmasına rağmen DataFrame
boyutu 6'dır.
Bu cevap, boyut ve sayı farkına göre DataFrame
ve değil ile ilgili Pandas Series
. Ne olduğunu kontrol etmedimSeries