পান্ডের মধ্যে groupby("x").countও পার্থক্য groupby("x").sizeকি?
আকার কি শূন্য বাদ দেয়?
পান্ডের মধ্যে groupby("x").countও পার্থক্য groupby("x").sizeকি?
আকার কি শূন্য বাদ দেয়?
NaNমান সহ বা বাদ দিয়ে চলেছে , এটি অবশ্যই একটি গৌণ বিষয় noted একাধিক সিরিজের সাথে ডেটা ফ্রেমের আউটপুট df.groupby('key').size()এবং তুলনা করুন df.groupby('key').count()। পার্থক্যটি সুস্পষ্ট: countঅন্য কোনও সামগ্রিক ফাংশন ( mean, max...) এর মতো কাজ করে sizeতবে গোষ্ঠীতে সূচী প্রবেশের সংখ্যা পাওয়ার জন্য নির্দিষ্ট, এবং তাই কলামের মানগুলিতে এই ফাংশনের জন্য অর্থহীন নয়। সঠিক ব্যাখ্যার জন্য @ সিএস 95 উত্তর দেখুন ।
উত্তর:
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
পান্ডায় আকার এবং গণনার মধ্যে পার্থক্য কী?
অন্যান্য উত্তরগুলি পার্থক্যটি নির্দেশ করেছে, তবে, " এনএএন-র গণনা করা হয় না" বলা সম্পূর্ণ নির্ভুল নয়। যদিও প্রকৃতপক্ষে 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এবং যখন কিছুই পাস করা হয় না তখন পান্ডারা কোনও অনুমান করার সিদ্ধান্ত নেয়।
@ এডচামের উত্তরে কেবল কিছুটা যুক্ত করতে, যদিও ডেটাতে কোনও এনএ মান নেই, তার আগে উদাহরণটি ব্যবহার করে গণনা () এর ফলাফল আরও ভার্বোস হয়:
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।
যখন আমরা সাধারণ ডেটাফ্রেমগুলি নিয়ে কাজ করি তখন কেবল পার্থক্যটি এনএএন মানগুলির অন্তর্ভুক্তি হতে পারে, মানে সারিগুলি গণনা করার সময় গণনাটি এনএন মানগুলিকে অন্তর্ভুক্ত করে না।
তবে আমরা যদি groupbyতখনকার সাথে এই ফাংশনগুলি ব্যবহার করে count()থাকি , সঠিক ফলাফল পেতে আমাদের কোনও সংখ্যার ক্ষেত্রের সাথে সংযুক্ত groupbyকরতে হবে যেখানে size()এই ধরণের সংঘবদ্ধতার প্রয়োজন নেই এমন গ্রুপগুলির সঠিক সংখ্যাটি পেতে ।
উপরের সমস্ত উত্তর ছাড়াও, আমি আরও একটি স্বরূপ উল্লেখ করতে চাই যা আমি উল্লেখযোগ্য বলে মনে করি।
আপনি পান্ডার Datarameআকারের সাথে সম্পর্কিত করতে পারেন এবং জাভার Vectorsআকার এবং দৈর্ঘ্যের সাথে গণনা করতে পারেন । যখন আমরা ভেক্টর তৈরি করি তখন এর জন্য কিছু পূর্বনির্ধারিত মেমরি বরাদ্দ করা হয়। উপাদান যুক্ত করার সময় আমরা যখন এটি ধারণ করতে পারে এমন সংখ্যার কাছাকাছি পৌঁছে যায়, তখন আরও মেমরি বরাদ্দ করা হয়। একইভাবে, DataFrameআমরা উপাদানগুলি যুক্ত করার সাথে সাথে এটিকে বরাদ্দ করা মেমরিটি বৃদ্ধি পায়।
আকার বৈশিষ্ট্য বরাদ্দকৃত মেমরি সেলকে DataFrameসংখ্যা দেয় যেখানে গণনা প্রকৃতপক্ষে উপস্থিত উপাদানগুলির সংখ্যা দেয় DataFrame। উদাহরণ স্বরূপ,

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