কিভাবে একটি গ্রুপবাই জিনিস মুদ্রণ


133

আমি পান্ডাদের সাথে গ্রুপিংয়ের ফলাফল মুদ্রণ করতে চাই।

আমার একটি ডেটাফ্রেম রয়েছে:

import pandas as pd
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)})
print(df)

       A  B
0    one  0
1    one  1
2    two  2
3  three  3
4  three  4
5    one  5

'এ' দ্বারা গ্রুপিংয়ের পরে মুদ্রণ করার সময় আমার কাছে নিম্নলিখিতগুলি রয়েছে:

print(df.groupby('A'))

<pandas.core.groupby.DataFrameGroupBy object at 0x05416E90>

আমি কীভাবে ডেটাফ্রেমকে গোষ্ঠীযুক্ত মুদ্রণ করতে পারি?

যদি আমি করি:

print(df.groupby('A').head())

আমি ডেটাফ্রেমটি এমনভাবে প্রাপ্ত করেছি যেন এটি গোছানো হয়নি:

             A  B
A                
one   0    one  0
      1    one  1
two   2    two  2
three 3  three  3
      4  three  4
one   5    one  5

আমি এমন কিছু আশা করছিলাম:

             A  B
A                
one   0    one  0
      1    one  1
      5    one  5
two   2    two  2
three 3  three  3
      4  three  4

আমি সাথে সঠিক আউটপুট পাচ্ছি print df.groupby('A').head()। আপনার কাছে পান্ডার কোন সংস্করণ আছে?
অমিত ভার্মা

আমি আমার ডেস্কটপ এবং ল্যাপটপ দুটিতে সবেমাত্র 0.13.1 এ আপডেট করেছি।
ব্যবহারকারী 3465658

1
কীভাবে সরাসরি "তালিকা ()" করবেন? এবং তারপরে আপনি এটিকে কোনও সাধারণ ডেটা স্ট্রাকচার হিসাবে মুদ্রণ / মুদ্রণ করতে পারেন।
ট্রপিকপেনগুইন

আমি যতদূর বলতে পারি, একটি উত্তরও পছন্দসই আউটপুট উত্পাদন করতে সক্ষম নয়। এই নির্দিষ্ট উদাহরণের জন্য, আমি সবচেয়ে কাছেরটি খুঁজে পেতে পারি df.groupby(['A', 'B']).sum(), তবে জোড়াটি ('A', 'B')অনন্য না হলে এটি ব্যর্থ হবে ।
এরিক ডুমিনিল

উত্তর:


100

সহজভাবে করুন:

grouped_df = df.groupby('A')

for key, item in grouped_df:
    print(grouped_df.get_group(key), "\n\n")

এটিও কাজ করে,

grouped_df = df.groupby('A')    
gb = grouped_df.groups

for key, values in gb.iteritems():
    print(df.ix[values], "\n\n")

নির্বাচনী কী গোষ্ঠীকরণের জন্য:key_list_from_gb নিম্নলিখিতটি ব্যবহার করে এর অভ্যন্তরে আপনি কীগুলি সন্নিবেশ করান gb.keys(): উদাহরণস্বরূপ,

gb = grouped_df.groups
gb.keys()

key_list_from_gb = [key1, key2, key3]

for key, values in gb.items():
    if key in key_list_from_gb:
        print(df.ix[values], "\n")

1
অন্য বিকল্পটি হ'ল:for A in d['A'].unique(): print(A, df.query(f'A == "{A}"'))
tommy.carstensen

__iter __ () এছাড়াও কাজ করে এটা প্রতি দলের জন্য আয় জেনারেটর ফলনশীল ক্রম (নাম, subsetted বস্তুর)।
জেরেমি জেড

লুপ কেন না key_list_from_gb?
pfnuesel

66

যদি আপনি কেবল এটি প্রদর্শনের কোনও উপায় অনুসন্ধান করেন তবে আপনি বর্ণনা () ব্যবহার করতে পারেন:

grp = df.groupby['colName']
grp.describe()

এটি আপনাকে একটি ঝরঝরে টেবিল দেয়।


6
এটি একটি ঝরঝরে টেবিল তবে এটি পছন্দসই টেবিল নয়।
এরিক ডুমিনিল

15

আমি নিশ্চিত করেছি যে head()0.12 এবং 0.13 সংস্করণের মধ্যে পরিবর্তনগুলির আচরণ । এটি আমার কাছে বাগের মতো দেখাচ্ছে। আমি একটি ইস্যু তৈরি করেছি ।

কিন্তু একটি গ্রুপবাই ক্রিয়াকলাপ আসলে গ্রুপের অনুসারে বাছাই করা কোনও ডেটা ফ্রেম ফিরিয়ে দেয় না। .head()পদ্ধতি এইখানে একটু বিভ্রান্তিকর - এটা (এই ক্ষেত্রে আপনি বস্তুর পুনঃপরীক্ষা যাক শুধু একটি সুবিধার্থে বৈশিষ্ট্য dfযে আপনার দলবদ্ধ)। ফলাফল groupbyপৃথক ধরনের বস্তু, একটি GroupByবস্তু। আপনার অবশ্যই apply, transformবা filterকোনও ডেটাফ্রেম বা সিরিজে ফিরে যেতে হবে।

আপনি যা করতে চেয়েছিলেন তা এ কলামের মান অনুসারে বাছাই করা থাকলে আপনার ব্যবহার করা উচিত df.sort('A')


4
নোট যে headআসলে head(5)এটি করছে প্রথম 5 টি সারি দেখানো হচ্ছে df.groupby('A').apply(lambda x: x), 'শো' ফ্রেমে আরও সঠিক , যা কার্যকরভাবে পাস্ত্রু। আমি মনে করি আপনার কোনও pass()পদ্ধতি থাকতে পারে , সম্ভবত।
জেফ


9

এছাড়াও, অন্যান্য সহজ বিকল্প হতে পারে:

gb = df.groupby("A")
gb.count() # or,
gb.get_group(your_key)

7

পূর্ববর্তী উত্তরগুলি ছাড়াও:

আপনার উদাহরণ গ্রহণ করা,

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)})

তারপরে সহজ 1 লাইন কোড

df.groupby('A').apply(print)

4

ভাল অন্তর্দৃষ্টি জন্য সূর্য ধন্যবাদ। আমি তার সমাধানটি পরিষ্কার করে নিলাম এবং সহজভাবে করব:

for key, value in df.groupby('A'):
    print(key, value)

3

গ্রুপবাই অবজেক্টে কল লিস্ট ()

print(list(df.groupby('A')))

আপনি দেয়:

[('one',      A  B
0  one  0
1  one  1
5  one  5), ('three',        A  B
3  three  3
4  three  4), ('two',      A  B
2  two  2)]

হ্যাঁ, এই আরও ভোট প্রয়োজন! আপনি বস্তুটি দলবদ্ধ করার পরেও এটি করতে পারেন। df_g = df.groupby ('A') তারপরে আপনি কল করতে পারেন তালিকা (df_g) অথবা আপনি যদি কেবল প্রথম গ্রুপ কল তালিকা (df_g) চান [0]। আর পাইথনের চেয়ে ওপরে আর এটি আমার পছন্দ like আর-তে আপনাকে তথ্য দেখতে বেশিরভাগ অবজেক্টের মাধ্যমে পুনরাবৃত্তি করতে হবে না, তবে পাইথন আপনাকে অনেকগুলি অবজেক্টে থাকতে হবে। এর মতো প্রক্রিয়া সন্ধান করা সতেজ হয়। ধন্যবাদ এলিজাবেথ
পিভিচ

2

আপনি প্রিন্ট স্টেটমেন্টের মাধ্যমে গ্রুপপাইয়ের ডেটা সরাসরি দেখতে পারবেন না তবে লুপের জন্য গ্রুপটির মাধ্যমে পুনরাবৃত্তি করে আপনি দেখতে পারেন এই কোডটি চেষ্টা করে ডেটা দ্বারা গ্রুপটি দেখার জন্য

group = df.groupby('A') #group variable contains groupby data
for A,A_df in group: # A is your column and A_df is group of one kind at a time
  print(A)
  print(A_df)

গোষ্ঠীভিত্তিক ফলাফল হিসাবে এটি চেষ্টা করার পরে আপনি একটি আউটপুট পাবেন

আমি আসা করি এটা সাহায্য করবে


2

জুপিটার নোটবুক-এ আপনি নিম্নলিখিতটি করেন তবে এটি বস্তুর একটি দুর্দান্ত দলবদ্ধ সংস্করণ প্রিন্ট করে। applyপদ্ধতি multiindex dataframe সৃষ্টির সাহায্য করে।

by = 'A'  # groupby 'by' argument
df.groupby(by).apply(lambda a: a[:])

আউটপুট:

             A  B
A                
one   0    one  0
      1    one  1
      5    one  5
three 3  three  3
      4  three  4
two   2    two  2

যদি আপনি চান byকলাম (গুলি) আউটপুটে না আসে, কেবল কলাম (গুলি) বাদ দিন।

df.groupby(by).apply(lambda a: a.drop(by, axis=1)[:])

আউটপুট:

         B
A         
one   0  0
      1  1
      5  5
three 3  3
      4  4
two   2  2

এখানে, আমি কেন শেষের .iloc[:]পরিবর্তে কাজ করে না তা সম্পর্কে নিশ্চিত নই [:]। সুতরাং, আপডেটগুলি (বা বর্তমানে) কারণে ভবিষ্যতে যদি কিছু সমস্যা থাকে তবে .iloc[:len(a)]তাও কাজ করে।


0

আমি একটি কৌতুকপূর্ণ উপায় খুঁজে পেয়েছি, কেবল মস্তিষ্কের জন্য, কোডটি দেখুন:

df['a'] = df['A']  # create a shadow column for MultiIndexing
df.sort_values('A', inplace=True)
df.set_index(["A","a"], inplace=True)
print(df)

আউটপুট:

             B
A     a
one   one    0
      one    1
      one    5
three three  3
      three  4
two   two    2

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


0

অজগর 3

k = None
for name_of_the_group, group in dict(df_group):
    if(k != name_of_the_group):
        print ('\n', name_of_the_group)
        print('..........','\n')
    print (group)
    k = name_of_the_group

আরও ইন্টারেক্টিভ উপায়ে


-2

গ্রুপযুক্ত ডিএফ এর সমস্ত (বা নির্বিচারে অনেক) লাইন মুদ্রণ করতে:

import pandas as pd
pd.set_option('display.max_rows', 500)

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