পান্ডস ডেটাফ্রেম গ্রুপে দুটি কলাম এবং গণনা পান


165

আমার নীচের ফর্ম্যাটটিতে একটি পান্ডাস ডেটা ফ্রেম রয়েছে:

df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8], ['x/y/z','x/y','x/y/z/n','x/u','x','x/u/v','x/y/z','x','x/u/v/b','-','x/y','x/y/z','x','x/u/v/w'],['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
df.columns = ['col1','col2','col3','col4','col5']

ডিএফ:

   col1 col2 col3     col4 col5
0   1.1    A  1.1    x/y/z    1
1   1.1    A  1.7      x/y    3
2   1.1    A  2.5  x/y/z/n    3
3   2.6    B  2.6      x/u    2
4   2.5    B  3.3        x    4
5   3.4    B  3.8    x/u/v    2
6   2.6    B    4    x/y/z    5
7   2.6    A  4.2        x    3
8   3.4    B  4.3  x/u/v/b    6
9   3.4    C  4.5        -    3
10  2.6    B  4.6      x/y    5
11  1.1    D  4.7    x/y/z    1
12  1.1    D  4.7        x    1
13  3.3    D  4.8  x/u/v/w    1

এখন আমি নীচের মত দুটি কলাম দ্বারা এটি গ্রুপ করতে চান:

df.groupby(['col5','col2']).reset_index()

আউটপুট:

             index col1 col2 col3     col4 col5
col5 col2                                      
1    A    0      0  1.1    A  1.1    x/y/z    1
     D    0     11  1.1    D  4.7    x/y/z    1
          1     12  1.1    D  4.7        x    1
          2     13  3.3    D  4.8  x/u/v/w    1
2    B    0      3  2.6    B  2.6      x/u    2
          1      5  3.4    B  3.8    x/u/v    2
3    A    0      1  1.1    A  1.7      x/y    3
          1      2  1.1    A  2.5  x/y/z/n    3
          2      7  2.6    A  4.2        x    3
     C    0      9  3.4    C  4.5        -    3
4    B    0      4  2.5    B  3.3        x    4
5    B    0      6  2.6    B    4    x/y/z    5
          1     10  2.6    B  4.6      x/y    5
6    B    0      8  3.4    B  4.3  x/u/v/b    6

আমি নীচের মত প্রতিটি সারিতে গণনা পেতে চাই। প্রত্যাশিত আউটপুট:

col5 col2 count
1    A      1
     D      3
2    B      2
etc...

আমার প্রত্যাশিত আউটপুটটি কীভাবে পাবেন? এবং আমি প্রতিটি 'কল 2' মানের জন্য বৃহত্তম গণনা সন্ধান করতে চাই?


গতকাল সবে একটি খুব অনুরূপ প্রশ্ন এলো .. এখানে দেখুন
বিডিআমন্তে

উত্তর:


115

@ অ্যান্ডির উত্তর অনুসরণ করে, আপনি নিজের দ্বিতীয় প্রশ্নটি সমাধান করার জন্য নিম্নলিখিত কাজগুলি করতে পারেন:

In [56]: df.groupby(['col5','col2']).size().reset_index().groupby('col2')[[0]].max()
Out[56]: 
      0
col2   
A     3
B     2
C     1
D     3

1
আমি কি এর জন্য সি ... 1 ... 3 এর জন্য "কল 5" মান পেতে পারি?
নীলাণী আলগিরিয়াজ

141

আপনি খুঁজছেন size:

In [11]: df.groupby(['col5', 'col2']).size()
Out[11]:
col5  col2
1     A       1
      D       3
2     B       2
3     A       3
      C       1
4     B       1
5     B       2
6     B       1
dtype: int64

ওয়েটিংকুও ("দ্বিতীয় প্রশ্ন"), তবে কিছুটা ক্লিনারের মতো একই উত্তর পাওয়ার জন্য, স্তরটি গোষ্ঠীভুক্ত করা:

In [12]: df.groupby(['col5', 'col2']).size().groupby(level=1).max()
Out[12]:
col2
A       3
B       2
C       1
D       3
dtype: int64

1
আমি জানি না কেন আমি এটিকে ভুলে গেছি: ও, কোনওভাবেই আমার দ্বিতীয় প্রশ্নটি কী? প্রতিটি "কল 2" মানের জন্য সর্বাধিক গণনাটি সন্ধান করুন এবং সংশ্লিষ্ট "কোল 5" মান পান?
নীলাণী আলগিরিয়াজ

23

ঢোকানো তথ্য একটি পান্ডাস dataframe মধ্যে এবং কলামের নামের প্রদানের

import pandas as pd
df = pd.DataFrame([['A','C','A','B','C','A','B','B','A','A'], ['ONE','TWO','ONE','ONE','ONE','TWO','ONE','TWO','ONE','THREE']]).T
df.columns = [['Alphabet','Words']]
print(df)   #printing dataframe.

এটি আমাদের মুদ্রিত ডেটা:

এখানে চিত্র বর্ণনা লিখুন

পান্ডা এবং কাউন্টারে একটি গ্রুপ ডেটাফ্রেম তৈরি করার জন্য ,
আপনাকে আরও একটি কলাম সরবরাহ করতে হবে যা গোষ্ঠীকরণকে গণনা করে, সেই কলামটিকে ডেটাফ্রেমে "COUNTER" হিসাবে কল করি

এটার মত:

df['COUNTER'] =1       #initially, set that counter to 1.
group_data = df.groupby(['Alphabet','Words'])['COUNTER'].sum() #sum function
print(group_data)

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


9
আমি কীভাবে বর্ণমালা কলাম (উদাহরণস্বরূপ) নীচে পুনরাবৃত্তি করতে এবং প্রথম কলামে ফাঁক ফেলে রাখব না ??
সুখের

বর্ণমালা এবং শব্দের উপর ভিত্তি করে যোগ করা প্রতিটি গ্রুপের মান কীভাবে অ্যাক্সেস করবেন?
রাহুল গোয়াল

21

আইডোমেটিক সমাধান যা কেবলমাত্র একটি একক গ্রুপবিশেষ ব্যবহার করে uses

(df.groupby(['col5', 'col2']).size() 
   .sort_values(ascending=False) 
   .reset_index(name='count') 
   .drop_duplicates(subset='col2'))

  col5 col2  count
0    3    A      3
1    1    D      3
2    5    B      2
6    3    C      1

ব্যাখ্যা

গ্রুপবাই sizeপদ্ধতির ফলাফল সূচকের সাথে col5এবং সাথে একটি সিরিজ col2। এখান থেকে, আপনি প্রতিটি মানের সর্বাধিক মান সন্ধান করতে আরেকটি গ্রুপবাই পদ্ধতি ব্যবহার করতে পারেন col2তবে এটি করার প্রয়োজন নেই। আপনি কেবল সাজানোর সব মান descendingly এবং তারপর শুধুমাত্র সারির প্রথম সংঘটন সঙ্গে রাখতে পারবেন না col2সঙ্গে drop_duplicatesপদ্ধতি।


কোন PARAM বলা হয় nameমধ্যে reset_index(): পান্ডাস বর্তমান সংস্করণে pandas.pydata.org/pandas-docs/stable/generated/...
mmBs


ঠিক আছে, আমার খারাপ। DataFrameনা দিয়ে কাজ করার সময় আমি এটি ব্যবহার করেছি Series। লিঙ্কের জন্য ধন্যবাদ।
মিমিবি

2

আপনি কি ডেটাফ্রেমে গ্রুপগুলির গণনা সহ একটি নতুন কলাম ('গণনা_কলাম' বলুন) যুক্ত করতে চান:

df.count_column=df.groupby(['col5','col2']).col5.transform('count')

(আমি 'কল 5' বাছাই করেছি কারণ এতে কোনও ন্যান নেই)


-2

আপনি কেবল অন্তর্নির্মিত ফাংশন গণনাটি গ্রুপবাই ফাংশন অনুসরণ করতে পারেন

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