समूह वस्तु कैसे मुद्रित करें


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 अपडेट किया है।
user3465658

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 __ () भी काम करता है। यह प्रत्येक समूह के लिए जेनरेटर उपज क्रम (नाम, सब्सट्रेट ऑब्जेक्ट) देता है
जेरेमी जेड

key_list_from_gbहालांकि लूप पर क्यों नहीं ?
pfnuesel

66

यदि आप इसे प्रदर्शित करने का तरीका ढूंढ रहे हैं, तो आप वर्णन का उपयोग कर सकते हैं ():

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

इससे आपको एक साफ सुथरी टेबल मिलती है।


6
यह एक साफ-सुथरी मेज है, लेकिन यह वांछित तालिका नहीं है।
एरिक डुमिनील

15

मैंने पुष्टि की कि head()संस्करण 0.12 और 0.13 के बीच परिवर्तनों का व्यवहार । यह मेरे लिए एक बग की तरह लग रहा है। मैंने एक मुद्दा बनाया ।

लेकिन एक ग्रुपबी ऑपरेशन वास्तव में समूह द्वारा छांटे गए डेटाफ्रेम को वापस नहीं करता है। यहाँ .head()विधि थोड़ा भ्रामक है - यह केवल एक सुविधा है जो आपको उस वस्तु (जो इस मामले में df) को समूहीकृत करने के लिए फिर से जांचने देती है। का परिणाम groupbyअलग वस्तु, एक GroupByवस्तु है। आपको DataFrame या Series पर वापस जाना होगा apply, transformया होना चाहिए filter

यदि आप जो कुछ करना चाहते हैं, वह कॉलम A में मौजूद मानों के आधार पर छांटा गया है, तो आपको उपयोग करना चाहिए 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

GroupBy ऑब्जेक्ट पर कॉल सूची ()

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] चाहते हैं। यह एक चीज है जो मुझे आर ओवर पाइथन के बारे में पसंद है। R में आपको डेटा को देखने के लिए अधिकांश ऑब्जेक्ट के माध्यम से चलना नहीं पड़ता है, लेकिन पायथन में आपको बहुत सी वस्तु पर चलना होगा। इस तरह से proceses ढूँढना ताज़ा कर रहे हैं। धन्यवाद एलिजाबेथ।
पीवी

2

आप प्रिंट स्टेटमेंट द्वारा सीधे GroupBy डेटा नहीं देख सकते हैं, लेकिन आप लूप के लिए समूह का उपयोग करके पुनरावृत्ति करके देख सकते हैं इस कोड को डेटा द्वारा समूह को देखने का प्रयास करें

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

Jupyter नोटबुक में, यदि आप निम्न कार्य करते हैं, तो यह ऑब्जेक्ट का एक अच्छा समूहीकृत संस्करण प्रिंट करता है। 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

अजगर में ३

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

समूहीकृत df की सभी (या मनमाने ढंग से) पंक्तियों को मुद्रित करने के लिए:

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

grouped_df = df.group(['var1', 'var2'])
print(grouped_df)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.