Pandas DataFrame DataFrame.groupby() 함수

Suraj Joshi 2023년1월30일
  1. pandas.DataFrame.groupby()의 구문 :
  2. 예제 코드: 단일 열의 값을 기준으로pandas.DataFrame.groupby()를 사용하여 두 개의 DataFrames 그룹화
  3. 예제 코드: 여러 조건에 따라pandas.DataFrame.groupby()를 사용하여 두 개의 데이터 프레임 그룹화
  4. 예제 코드: pandas.DataFrame.groupby()에서as_index = False 설정
Pandas DataFrame DataFrame.groupby() 함수

pandas.DataFrame.groupby()는 주어진 기준에 따라 DataFrame을 그룹으로 분할합니다. groupby()메소드를 사용하여 대규모 데이터 세트를 쉽게 조작 할 수 있습니다.

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)

매개 변수

by 매핑, 함수, 문자열, by또는 그룹 요소에 대한 반복 가능
axis row (axis=0) 또는column (axis = 1)과 함께 그룹화
level 정수. 특정 수준 또는 수준별로 그룹화 할 값
as_index 부울. 인덱스로 그룹 레이블이있는 객체를 반환합니다.
sort 부울. 그룹 키를 정렬합니다.
group_keys 부울. 조각을 식별하기 위해 색인에 그룹 키를 추가합니다.
squeeze 부울. 가능한 경우 수익의 크기를 줄입니다.
observed 부울. 그룹화 중 하나가 범주 형인 경우에만 적용하고 True로 설정된 경우 범주 형 그룹화에 대해 관찰 된 값만 표시합니다.

반환

그룹화 된 정보를 포함하는DataFrameGroupBy 객체를 반환합니다.

예제 코드: 단일 열의 값을 기준으로pandas.DataFrame.groupby()를 사용하여 두 개의 DataFrames 그룹화

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))

출력:

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

In_Stock 열의 값에 따라DataFrame을 그룹으로 그룹화하고DataFrameGroupBy 객체를 반환합니다.

groupby()가 반환하는DataFrameGroupBy 객체에 대한 세부 정보를 얻으려면DataFrameGroupBy 객체의first()메서드를 사용하여 각 그룹의 첫 번째 요소를 가져올 수 있습니다.

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())

출력:

            Name  Price
In_Stock               
No         Mango     24
Yes       Orange     34

df에서 분리 된 두 그룹의 첫 번째 요소로 구성된 DataFrame을 인쇄합니다.

get_group()메소드를 사용하여 전체 그룹을 인쇄 할 수도 있습니다.

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'))

출력:

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

In_Stock 열의 값이Yesdf의 모든 요소를 인쇄합니다. 먼저groubpy()메서드를 사용하여In_Stock 열의 값이 다른 요소를 별도의 그룹으로 그룹화 한 다음get_group()메서드를 사용하여 특정 그룹에 액세스합니다.

예제 코드: 여러 조건에 따라pandas.DataFrame.groupby()를 사용하여 두 개의 데이터 프레임 그룹화

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())

출력:

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

In_StockSupplier열의 값을 기반으로 df를 그룹으로 그룹화하고 DataFrameGroupBy개체를 반환합니다.

우리는 각 그룹의 첫 번째 요소를 얻기 위해first()메소드를 사용합니다. 다음 네 그룹의 첫 번째 요소 조합으로 구성된 DataFrame을 반환합니다.

  • In_StockNoSupplierABC 값으로 그룹화합니다.
  • In_StockNoSupplierXYZ 값으로 그룹화합니다.
  • In_StockYesSupplierABC 값으로 그룹화합니다.
  • In_StockYesSupplierXYZ 값으로 그룹화합니다.

GroupBy 객체의 메소드가 반환하는DataFramegroupby()함수에 여러 레이블을 전달할 때MultiIndex를 갖습니다.

print(grouped_df.first().index)

출력:

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

예제 코드: pandas.DataFrame.groupby()에서as_index = False 설정

DataFrame.groupby()메서드의as_index 매개 변수는 기본적으로True입니다. 그룹 레이블은first()와 같은GroupBy 메소드를 적용 할 때 반환 된DataFrame의 인덱스입니다.

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)

출력:

            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')

보시다시피 생성 된DataFrame의 인덱스는 기본적으로as_index = True이기 때문에 그룹 레이블입니다.

as_index = False를 설정하면 인덱스는 숫자로 자동 생성 된 인덱스가됩니다.

작가: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

관련 문장 - Pandas DataFrame