পান্ডায় আকার এবং গণনার মধ্যে পার্থক্য কী?


96

পান্ডের মধ্যে groupby("x").countও পার্থক্য groupby("x").sizeকি?

আকার কি শূন্য বাদ দেয়?


4
ডকুমেন্টেশন বলেছে যে, "এনডিফ্রেমে উপাদানগুলির রিটার্ন সংখ্যা", এবং "অনুরোধ করা অক্ষের উপরে নন-এনএ / নাল পর্যবেক্ষণ সংখ্যার সাথে রিটার্ন সিরিজ গণনা করুন। অ-ভাসমান পয়েন্ট ডেটার সাথেও কাজ করে (এনএএন এবং কোনওটি সনাক্ত করে না")
হামসটারনিক

4
গৃহীত উত্তরের বিবরণে বলা হয় যে পার্থক্যটি NaNমান সহ বা বাদ দিয়ে চলেছে , এটি অবশ্যই একটি গৌণ বিষয় noted একাধিক সিরিজের সাথে ডেটা ফ্রেমের আউটপুট df.groupby('key').size()এবং তুলনা করুন df.groupby('key').count()। পার্থক্যটি সুস্পষ্ট: countঅন্য কোনও সামগ্রিক ফাংশন ( mean, max...) এর মতো কাজ করে sizeতবে গোষ্ঠীতে সূচী প্রবেশের সংখ্যা পাওয়ার জন্য নির্দিষ্ট, এবং তাই কলামের মানগুলিতে এই ফাংশনের জন্য অর্থহীন নয়। সঠিক ব্যাখ্যার জন্য @ সিএস 95 উত্তর দেখুন ।
মিনিট

উত্তর:


107

sizeNaNমান অন্তর্ভুক্ত , countনা:

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 

6
আমি মনে করি যে একটি সিরিজ আকারের সময় গণনাটি একটি ডেটা ফ্রেমও দেয়?
মিস্টার_আর_আমস_১১

4
.size () ফাংশনটি শুধুমাত্র নির্দিষ্ট কলামের সম্মিলিত মান পান যখন কলাম () প্রতিটি কলামের জন্য ব্যবহৃত হয়।
নচিকেত

@ মিঃ_আর_আমস_ডি আকার একটি পূর্ণসংখ্যার ফিরিয়ে দেয়
বোর্ডটসি

@boardtc df.size একটি সংখ্যা ফেরত দেয় - এখানে গ্রুপবিধি পদ্ধতিগুলি আলোচনা করা হয়েছে, প্রশ্নের লিঙ্কগুলি দেখুন।
মিস্টার_আর_আমস_ডে

আমার প্রশ্নের হিসাবে - গণনা এবং আকার প্রকৃতপক্ষে ডেটাফ্রেম এবং সিরিজগুলি যথাক্রমে যখন কোনও ডাটাফ্রেমগ্রুপবাইয়ের কাছে আবদ্ধ হয় - প্রশ্নটিতে সিরিজগ্রুপবাইয়ের সাথে আবদ্ধ হয় তাই তারা উভয়ই সিরিজের উদাহরণ ফেরত দেয়
Mr_and_Mrs_D

29

পান্ডায় আকার এবং গণনার মধ্যে পার্থক্য কী?

অন্যান্য উত্তরগুলি পার্থক্যটি নির্দেশ করেছে, তবে, " এনএএন-র গণনা করা হয় না" বলা সম্পূর্ণ নির্ভুল নয়। যদিও প্রকৃতপক্ষে Nans গণনা করে, আসলে এই সত্য যে একটি ফল আয় আকার বস্তুর (বা দৈর্ঘ্য) এটা বলা হয়। স্বাভাবিকভাবেই, এর মধ্যে রয়েছে সারি / মানগুলি যা NaN।sizecountsizesize

সুতরাং, সংক্ষেপে sizeবলতে গেলে, সিরিজ / ডেটা ফ্রেম 1 এর আকার প্রদান করে ,

df = pd.DataFrame({'A': ['x', 'y', np.nan, 'z']})
df

     A
0    x
1    y
2  NaN
3    z

df.A.size
# 4

... countনন-এনএন মানগুলি গণনা করার সময় :

df.A.count()
# 3 

লক্ষ করুন যে, sizeএকটি বৈশিষ্ট্য আছে (হিসাবে একই ফলাফল দেয় len(df)বা len(df.A))। countএকটি ফাংশন।

১. DataFrame.sizeএছাড়াও একটি বৈশিষ্ট্য এবং ডেটাফ্রেমে উপাদানগুলির সংখ্যা (সারি x কলাম) প্রদান করে।


আচরণ GroupBy- আউটপুট কাঠামো

বেসিক পার্থক্য ছাড়াও, GroupBy.size()বনাম কল করার সময় উত্পন্ন আউটপুটটির কাঠামোর মধ্যেও পার্থক্য রয়েছে 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

বিবেচনা,

df.groupby('A').size()

A
a    3
b    2
c    3
dtype: int64

বনাম,

df.groupby('A').count()

   B
A   
a  2
b  0
c  2

GroupBy.countআপনি যখন countসমস্ত কলামে কল করবেন তখন ডেটাফ্রেম ফেরত দেয় , যখন GroupBy.sizeকোনও সিরিজ দেয়।

কারণটি হ'ল sizeসমস্ত কলামের ক্ষেত্রে একই, সুতরাং কেবলমাত্র একটি ফলাফল পাওয়া যায়। এদিকে, countপ্রতিটি কলামের জন্য ডেকে আনা হয়েছে, কারণ ফলাফলগুলি প্রতিটি কলামে কতটি এনএএন রয়েছে তার উপর নির্ভর করবে।


সঙ্গে আচরণ pivot_table

আর একটি উদাহরণ pivot_tableকীভাবে এই ডেটা ব্যবহার করে। মনে করুন আমরা ক্রস ট্যাবুলেশন গণনা করতে চাই

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

সহ pivot_table, আপনি ইস্যু করতে পারেন 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

কিন্তু countকাজ করে না; একটি খালি ডেটাফ্রেম ফিরে আসে:

df.pivot_table(index='A', columns='B', aggfunc='count')

Empty DataFrame
Columns: []
Index: [0, 1]

আমি বিশ্বাস করি এর কারণ 'count'হ'ল তর্কটি প্রেরণ করা সিরিজটি অবশ্যই করা উচিত valuesএবং যখন কিছুই পাস করা হয় না তখন পান্ডারা কোনও অনুমান করার সিদ্ধান্ত নেয়।


7

@ এডচামের উত্তরে কেবল কিছুটা যুক্ত করতে, যদিও ডেটাতে কোনও এনএ মান নেই, তার আগে উদাহরণটি ব্যবহার করে গণনা () এর ফলাফল আরও ভার্বোস হয়:

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সমান সমান বলে মনে হয় count
QM.py

@ QM.py না, তা নয়। groupbyআউটপুট পার্থক্যের কারণ এখানে ব্যাখ্যা করা হয়েছে
CS95

1

যখন আমরা সাধারণ ডেটাফ্রেমগুলি নিয়ে কাজ করি তখন কেবল পার্থক্যটি এনএএন মানগুলির অন্তর্ভুক্তি হতে পারে, মানে সারিগুলি গণনা করার সময় গণনাটি এনএন মানগুলিকে অন্তর্ভুক্ত করে না।

তবে আমরা যদি groupbyতখনকার সাথে এই ফাংশনগুলি ব্যবহার করে count()থাকি , সঠিক ফলাফল পেতে আমাদের কোনও সংখ্যার ক্ষেত্রের সাথে সংযুক্ত groupbyকরতে হবে যেখানে size()এই ধরণের সংঘবদ্ধতার প্রয়োজন নেই এমন গ্রুপগুলির সঠিক সংখ্যাটি পেতে ।


0

উপরের সমস্ত উত্তর ছাড়াও, আমি আরও একটি স্বরূপ উল্লেখ করতে চাই যা আমি উল্লেখযোগ্য বলে মনে করি।

আপনি পান্ডার Datarameআকারের সাথে সম্পর্কিত করতে পারেন এবং জাভার Vectorsআকার এবং দৈর্ঘ্যের সাথে গণনা করতে পারেন । যখন আমরা ভেক্টর তৈরি করি তখন এর জন্য কিছু পূর্বনির্ধারিত মেমরি বরাদ্দ করা হয়। উপাদান যুক্ত করার সময় আমরা যখন এটি ধারণ করতে পারে এমন সংখ্যার কাছাকাছি পৌঁছে যায়, তখন আরও মেমরি বরাদ্দ করা হয়। একইভাবে, DataFrameআমরা উপাদানগুলি যুক্ত করার সাথে সাথে এটিকে বরাদ্দ করা মেমরিটি বৃদ্ধি পায়।

আকার বৈশিষ্ট্য বরাদ্দকৃত মেমরি সেলকে DataFrameসংখ্যা দেয় যেখানে গণনা প্রকৃতপক্ষে উপস্থিত উপাদানগুলির সংখ্যা দেয় DataFrame। উদাহরণ স্বরূপ, এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন যে সেখানে 3 টি সারি রয়েছে DataFrame, এর আকার 6।

এই উত্তরটি আকার এবং গণ্য পার্থক্যকে সম্মান করে DataFrameএবং না coversেকে দেয় Pandas Series। কি হয় তা আমি পরীক্ষা করে দেখিনিSeries

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.