দ্রুত উত্তর:
প্রতি গ্রুপে সারি সংখ্যা পাওয়ার সহজতম উপায় হ'ল কল করা .size()
যা একটি Series
:
df.groupby(['col1','col2']).size()
সাধারণত আপনি এই ফলাফলটিকে DataFrame
(এ পরিবর্তে Series
) চান তাই আপনি এটি করতে পারেন:
df.groupby(['col1', 'col2']).size().reset_index(name='counts')
আপনি যদি প্রতিটি গোষ্ঠীর সারি গণনা এবং অন্যান্য পরিসংখ্যান গণনা করতে চান তা নীচে পড়া চালিয়ে যান।
বিস্তারিত উদাহরণ:
নিম্নলিখিত উদাহরণ ডেটা ফ্রেম বিবেচনা করুন:
In [2]: df
Out[2]:
col1 col2 col3 col4 col5 col6
0 A B 0.20 -0.61 -0.49 1.49
1 A B -1.53 -1.01 -0.39 1.82
2 A B -0.44 0.27 0.72 0.11
3 A B 0.28 -1.32 0.38 0.18
4 C D 0.12 0.59 0.81 0.66
5 C D -0.13 -1.65 -1.64 0.50
6 C D -1.42 -0.11 -0.18 -0.44
7 E F -0.00 1.42 -0.26 1.17
8 E F 0.91 -0.47 1.35 -0.34
9 G H 1.48 -0.63 -1.14 0.17
প্রথমে .size()
সারি গণনা পেতে ব্যবহার করা যাক :
In [3]: df.groupby(['col1', 'col2']).size()
Out[3]:
col1 col2
A B 4
C D 3
E F 2
G H 1
dtype: int64
তাহলে আসুন .size().reset_index(name='counts')
সারিটি গণনা করতে ব্যবহার করুন :
In [4]: df.groupby(['col1', 'col2']).size().reset_index(name='counts')
Out[4]:
col1 col2 counts
0 A B 4
1 C D 3
2 E F 2
3 G H 1
আরও পরিসংখ্যান জন্য ফলাফল সহ
আপনি যখন গোষ্ঠী করা ডেটাতে পরিসংখ্যান গণনা করতে চান, সাধারণত এটি দেখতে এই রকম হয়:
In [5]: (df
...: .groupby(['col1', 'col2'])
...: .agg({
...: 'col3': ['mean', 'count'],
...: 'col4': ['median', 'min', 'count']
...: }))
Out[5]:
col4 col3
median min count mean count
col1 col2
A B -0.810 -1.32 4 -0.372500 4
C D -0.110 -1.65 3 -0.476667 3
E F 0.475 -0.47 2 0.455000 2
G H -0.630 -0.63 1 1.480000 1
নেস্টেড কলাম লেবেলের কারণে এবং উপরের ফলাফলটি প্রতি কলাম ভিত্তিতে সারি গণনা করার কারণে উপরের ফলাফলটি সামান্য বিরক্তিকর।
আউটপুটটিতে আরও নিয়ন্ত্রণ অর্জনের জন্য আমি সাধারণত পরিসংখ্যানগুলিকে পৃথক সমষ্টিগুলিতে বিভক্ত করি যা আমি পরে ব্যবহার করে একত্রিত করি join
। দেখে মনে হচ্ছে:
In [6]: gb = df.groupby(['col1', 'col2'])
...: counts = gb.size().to_frame(name='counts')
...: (counts
...: .join(gb.agg({'col3': 'mean'}).rename(columns={'col3': 'col3_mean'}))
...: .join(gb.agg({'col4': 'median'}).rename(columns={'col4': 'col4_median'}))
...: .join(gb.agg({'col4': 'min'}).rename(columns={'col4': 'col4_min'}))
...: .reset_index()
...: )
...:
Out[6]:
col1 col2 counts col3_mean col4_median col4_min
0 A B 4 -0.372500 -0.810 -1.32
1 C D 3 -0.476667 -0.110 -1.65
2 E F 2 0.455000 0.475 -0.47
3 G H 1 1.480000 -0.630 -0.63
পাদটিকা
পরীক্ষার ডেটা তৈরি করতে ব্যবহৃত কোডটি নীচে দেখানো হয়েছে:
In [1]: import numpy as np
...: import pandas as pd
...:
...: keys = np.array([
...: ['A', 'B'],
...: ['A', 'B'],
...: ['A', 'B'],
...: ['A', 'B'],
...: ['C', 'D'],
...: ['C', 'D'],
...: ['C', 'D'],
...: ['E', 'F'],
...: ['E', 'F'],
...: ['G', 'H']
...: ])
...:
...: df = pd.DataFrame(
...: np.hstack([keys,np.random.randn(10,4).round(2)]),
...: columns = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6']
...: )
...:
...: df[['col3', 'col4', 'col5', 'col6']] = \
...: df[['col3', 'col4', 'col5', 'col6']].astype(float)
...:
দাবি পরিত্যাগী:
আপনি যে সমস্ত কলামগুলিকে একত্রিত করছেন তার মধ্যে যদি শূন্য মান থাকে তবে আপনি প্রতিটি কলামের জন্য স্বতন্ত্র সমষ্টি হিসাবে গোষ্ঠী সারি গণনার দিকে তাকিয়ে থাকতে চান। অন্যথায় আপনি আসলে কতগুলি রেকর্ড গড় হিসাবে জিনিস গণনা করতে ব্যবহার করা হচ্ছে তা সম্পর্কে বিভ্রান্ত হতে পারে কারণ পান্ডগুলি এ NaN
সম্পর্কে আপনাকে কিছু না বলেই গড় গণনাতে এন্ট্রিগুলি ফেলে দেবে ।
df[['col1','col2','col3','col4']].groupby(['col1','col2']).agg(['mean', 'count'])