اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

الفرق المحوري بين الدالتين أن size يمكن أن تحتوي على NaN اما count فلا،أنظر المثال التالي للتوضيح أكثر:

In [1]:
df = pd.DataFrame({'x':[0,1,2,2], 'y':[1,2,4,np.NaN], 'z':np.random.randn(4)})
df

Out[46]:
   a   b         c
0  0   1  1.067627
1  1   2  0.458084
2  2 NaN -2.238091
3  2   4  1.256943

In [2]:
print(df.groupby(['x'])['y'].count())

x
0    1
1    1
2    1

In [3]:
print(df.groupby(['x'])['y'].size())

x
0    1
1    1
2    2
 

لاحظ أنه في count لم يقم بعَد ال NaN بينما قام بعَدها في size.

  • 0
نشر

size و count كل منهما يستخدم من أجل أغراض مختلفة.
size هو attribute تقوم بحساب حجم (أو طول) الكائن الذي تم استدعاؤه عليه. وبطبيعة الحال يتضمن هذا أيضاً الصفوف / القيم التي هي NaN. أما count فهو تابع مهمته عد الخلايا التي ليست NaN لكل عمود أو صف.

import pandas as pd
import numpy as np
df = pd.DataFrame({'col': ['x', np.nan, 'x']})
df
"""
    col
0 	x
1 	NaN
2 	x
"""
df.col.size # 3
df.col.count() # 2    nan  لم يحسب ال 

أيضاً هناك اختلاف في بنية الناتج عند استدعاء GroupBy.size و GroupBy.count. حيث أن GroupBy.count تعيد DataFrame أما GroupBy.siz تعيد series:

import pandas as pd
import numpy as np
df = pd.DataFrame({
    'gb': list('aaab'),
    'col': ['x', np.nan, 'x',"x"]})
df
"""
  gb 	col
0 	a 	x
1 	a 	NaN
2 	a 	x
3 	b 	x
"""
df.groupby('gb').size()
"""
    gb
a    3
b    1
dtype: int64
"""
df.groupby('gb').count()
"""
    col
gb 	
a 	2
b 	1
"""
type(df.groupby('gb').count())
# pandas.core.frame.DataFrame
type(df.groupby('gb').size())
# pandas.core.series.Series

هناك اختلاف أخير عند استخدامنا ل pivot_table. لنفترض أننا نود حساب ال cross tabulation لـلداتافريم التالي:

df
"""
   A  B
0  0  1
1  0  1
2  1  2
3  0  2
4  0  0
"""
pd.crosstab(df.A, df.B)  
"""
B  0  1  2
A         
0  1  2  1
1  0  0  1
"""
#يمكنك عرض الحجم pivot_table باستخدام  
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
"""
#لايعمل هنا حيث يتم إرجاع داتافريم فارغ count لكن 
df.pivot_table(index='A', columns='B', aggfunc='count')
"""
Empty DataFrame
Columns: []
Index: [0, 1]
"""

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...