Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas – DataFrame에서 그룹별 첫 번째 값 계산하기

Pandas에서 그룹화된 데이터의 각 그룹에 대한 첫 번째 값(first)을 계산하려면 groupby.first() 메서드를 사용합니다. 이 메서드는 동일한 키로 묶인 여러 행 중에서 가장 먼저 나타난 값만 반환해 주기 때문에, 중복 데이터를 정리하거나 그룹별 대표값을 추출할 때 매우 유용합니다.

라이브러리 임포트

먼저 필요한 라이브러리를 별칭(alias)과 함께 임포트합니다.

import pandas as pd

DataFrame 생성

이제 3개의 열(Car, Place, Units)을 가진 DataFrame을 생성합니다.

dataFrame = pd.DataFrame(
    {
        "Car": ['BMW', 'Lexus', 'BMW', 'Tesla', 'Lexus', 'Tesla'],
        "Place": ['Delhi', 'Bangalore', 'Pune', 'Punjab', 'Chandigarh', 'Mumbai'],
        "Units": [100, 150, 50, 80, 110, 90]
    }
)

생성된 DataFrame에는 BMW, Lexus, Tesla 차종이 각각 두 번씩 등장합니다. 여기서 우리는 각 차종(그룹)별로 가장 처음 나타난 행의 값을 추출하고자 합니다.

그룹화 및 first() 적용

먼저 특정 열을 기준으로 DataFrame을 그룹화합니다.

groupDF = dataFrame.groupby("Car")

그다음 first() 메서드로 각 그룹의 첫 번째 값을 계산하고, reset_index()로 인덱스를 초기화하여 결과를 보기 좋게 정리합니다.

res = groupDF.first()
res = res.reset_index()

전체 예제 코드

지금까지의 과정을 하나로 합친 전체 코드는 다음과 같습니다.

import pandas as pd

dataFrame = pd.DataFrame(
    {
        "Car": ['BMW', 'Lexus', 'BMW', 'Tesla', 'Lexus', 'Tesla'],
        "Place": ['Delhi', 'Bangalore', 'Pune', 'Punjab', 'Chandigarh', 'Mumbai'],
        "Units": [100, 150, 50, 80, 110, 90]
    }
)

print("DataFrame ...\n", dataFrame)

# Car 열을 기준으로 DataFrame 그룹화
groupDF = dataFrame.groupby("Car")

# 그룹별 첫 번째 값 계산 후 인덱스 초기화
res = groupDF.first()
res = res.reset_index()

print("\nFirst of group values = \n", res)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다. 반복되는 값 중 가장 처음 등장한 값, 즉 각 그룹의 첫 번째 값이 표시됩니다.

DataFrame ...
     Car       Place   Units
0    BMW       Delhi     100
1  Lexus   Bangalore     150
2    BMW        Pune      50
3  Tesla      Punjab      80
4  Lexus  Chandigarh     110
5  Tesla      Mumbai      90

First of group values =
     Car      Place  Units
0    BMW      Delhi    100
1  Lexus  Bangalore    150
2  Tesla     Punjab     80

정리

groupby.first()는 그룹화된 데이터에서 각 그룹의 첫 번째(최초로 등장한) 값을 손쉽게 추출할 수 있는 메서드입니다. 예제에서 볼 수 있듯이 BMW는 Delhi/100, Lexus는 Bangalore/150, Tesla는 Punjab/80처럼 각 차종이 처음 등장한 시점의 Place와 Units 값이 반환됩니다. 참고로 결측치(NaN)가 포함된 경우 first()는 NaN이 아닌 첫 번째 유효한 값을 반환한다는 점도 함께 기억해 두면 좋습니다.