Pandas DataFrame DataFrame.groupby() Funktion

Suraj Joshi 30 Januar 2023
  1. Syntax von pandas.DataFrame.groupby():
  2. Beispiel-Codes: Gruppieren Sie zwei DataFrames mit pandas.DataFrame.groupby() basierend auf den Werten einer einzelnen Spalte
  3. Beispiel-Codes: Gruppieren Sie zwei DataFrame mit pandas.DataFrame.groupby() basierend auf mehreren Bedingungen
  4. Beispiel-Codes: Setzen Sie as_index=False in pandas.DataFrame.groupby()
Pandas DataFrame DataFrame.groupby() Funktion

pandas.DataFrame.groupby() teilt den DataFrame auf der Grundlage der angegebenen Kriterien in Gruppen auf. Mit der groupby()-Methode können wir große Datensätze leicht manipulieren.

Syntax von pandas.DataFrame.groupby():

DataFrame.groupby(
    by=None,
    axis=0,
    level=None,
    as_index=True,
    sort=True,
    group_keys=True,
    squeeze: bool=False,
    observed: bool=False)

Parameter

by Abbildung, Funktion, Zeichenkette, Label oder iterierbar auf Gruppenelemente
axis gruppieren durch zusammen mit der row (axis=0) oder der column (axis=1)
level Ganzzahliger Wert zur Gruppierung nach einer bestimmten Ebene oder bestimmten Ebenen
as_index Boolesch. Es gibt ein Objekt mit Gruppenbeschriftungen als Index zurück.
sort Boolesch. Es sortiert die Gruppenschlüssel
group_keys Boolesch. Es fügt Gruppenschlüssel zum Index hinzu, um Stücke zu identifizieren.
squeeze Boolesch. Es verringert die Dimension der Rückgabe, wenn möglich.
observed Boolesch. Nur zutreffend, wenn einer der Zackenbarsche kategorial ist, und zeigen nur beobachtete Werte für kategoriale Zackenbarsche an, wenn sie auf True gesetzt sind.

Zurück

Es gibt ein DataFrameGroupBy-Objekt zurück, das die zusammengefassten Informationen enthält.

Beispiel-Codes: Gruppieren Sie zwei DataFrames mit pandas.DataFrame.groupby() basierend auf den Werten einer einzelnen Spalte

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ) ,
             ('Mango', 24, 'No' ) ,
             ('banana', 14, 'No' ) ,
             ('Apple', 44, 'Yes' ) ,
             ('Pineapple', 64, 'No') ,
             ('Kiwi', 84, 'Yes')  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock']) 
grouped_df = df.groupby('In_Stock')
print(grouped_df)
print(type(grouped_df))

Ausgabe:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f73cc992d30>
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>

Es gruppiert den DataFrame in Gruppen basierend auf den Werten in der Spalte In_Stock und gibt ein DataFrameGroupBy Objekt zurück.

Um Details über das von groupby() zurückgegebene DataFrameGroupBy-Objekt zu erhalten, können wir die first()-Methode des DataFrameGroupBy-Objekts verwenden, um das erste Element jeder Gruppe zu erhalten.

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ) ,
             ('Mango', 24, 'No' ) ,
             ('banana', 14, 'No' ) ,
             ('Apple', 44, 'Yes' ) ,
             ('Pineapple', 64, 'No') ,
             ('Kiwi', 84, 'Yes')  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock']) 
grouped_df = df.groupby('In_Stock')
print(grouped_df.first())

Ausgabe:

            Name  Price
In_Stock               
No         Mango     24
Yes       Orange     34

Es druckt den DataFrame, der durch die ersten Elemente beider Gruppen gebildet wird, die von df abgespalten wurden.

Wir können auch die gesamte Gruppe mit der Methode get_group() ausdrucken.

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ) ,
             ('Mango', 24, 'No' ) ,
             ('banana', 14, 'No' ) ,
             ('Apple', 44, 'Yes' ) ,
             ('Pineapple', 64, 'No') ,
             ('Kiwi', 84, 'Yes')  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock']) 
grouped_df = df.groupby('In_Stock')
print(grouped_df.get_group('Yes'))

Ausgabe:

     Name  Price In_Stock
0  Orange     34      Yes
3   Apple     44      Yes
5    Kiwi     84      Yes

Es werden alle Elemente in df gedruckt, deren Wert in der Spalte In_Stock den Wert Yes hat. Zuerst gruppieren wir Elemente mit unterschiedlichen Werten in der Spalte In_Stock in separate Gruppen, indem wir die Methode groubpy() verwenden, und greifen dann auf eine bestimmte Gruppe mit der Methode get_group() zu.

Beispiel-Codes: Gruppieren Sie zwei DataFrame mit pandas.DataFrame.groupby() basierend auf mehreren Bedingungen

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','ABC' ) ,
             ('banana', 14, 'No','ABC' ) ,
             ('Apple', 44, 'Yes',"XYZ" ) ,
             ('Pineapple', 64, 'No',"XYZ") ,
             ('Kiwi', 84, 'Yes',"XYZ")  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock',"Supplier"]) 
grouped_df = df.groupby(['In_Stock', 'Supplier']) 
  
print(grouped_df.first())

Ausgabe:

                        Name  Price
In_Stock Supplier                  
No       ABC           Mango     24
         XYZ       Pineapple     64
Yes      ABC          Orange     34
         XYZ           Apple     44

Es gruppiert die df in Gruppen basierend auf ihren Werten in den Spalten In_Stock und Supplier und gibt ein DataFrameGroupBy Objekt zurück.

Wir verwenden die first() Methode, um das erste Element jeder Gruppe zu erhalten. Sie gibt einen DataFrame zurück, der aus der Kombination der ersten Elemente der folgenden vier Gruppen besteht:

  • Gruppe mit den Werten der In_Stock-Spalte No und der Supplier-Spalte ABC.
  • Gruppe mit Werten aus der In_Stock-Spalte No und der Supplier-Spalte XYZ.
  • Gruppe mit Werten aus der In_Stock-Spalte Yes und der Supplier-Spalte ABC.
  • Gruppe Werten aus der In_Stock-Spalte Yes und der Supplier-Spalte XYZ.

Der von den Methoden des GroupBy-Objekts zurückgegebene DataFrame hat einen MultiIndex, wenn wir der groupby()-Funktion mehrere Labels übergeben.

print(grouped_df.first().index)

Ausgabe:

MultiIndex(levels=[['No', 'Yes'], ['ABC', 'XYZ']],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
           names=['In_Stock', 'Supplier'])

Beispiel-Codes: Setzen Sie as_index=False in pandas.DataFrame.groupby()

Der Parameter as_index in der Methode DataFrame.groupby() ist standardmäßig True. Die Gruppenbezeichnung ist der Index des zurückgegebenen DataFrame, wenn GroupBy Methoden wie first() angewendet werden.

import pandas as pd

fruit_list = [
    ("Orange", 34, "Yes"),
    ("Mango", 24, "No"),
    ("banana", 14, "No"),
    ("Apple", 44, "Yes"),
    ("Pineapple", 64, "No"),
    ("Kiwi", 84, "Yes"),
]

df = pd.DataFrame(fruit_list, columns=["Name", "Price", "In_Stock"])

grouped_df = df.groupby("In_Stock", as_index=True)

firtGroup = grouped_df.first()
print(firtGroup)
print(firtGroup.index)

print("---------")

grouped_df = df.groupby("In_Stock", as_index=False)

firtGroup = grouped_df.first()
print(firtGroup)
print(firtGroup.index)

Ausgabe:

            Name  Price
In_Stock               
No         Mango     24
Yes       Orange     34
Index(['No', 'Yes'], dtype='object', name='In_Stock')
---------
  In_Stock    Name  Price
0       No   Mango     24
1      Yes  Orange     34
Int64Index([0, 1], dtype='int64')

Wie Sie sehen konnten, ist der Index des generierten DataFrame standardmäßig der Gruppen-Label aufgrund von as_index=True.

Der Index wird automatisch als Zahlenindex generiert, wenn wir as_index=False setzen.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Verwandter Artikel - Pandas DataFrame