Pandas에서 하위 집합(subset)을 기준으로 중복 값을 제거하고 마지막 항목만 표시하려면 drop_duplicates() 메서드에 keep 매개변수를 'last' 값으로 설정하면 됩니다. drop_duplicates() 메서드는 DataFrame에서 중복된 행을 삭제하는 데 사용됩니다.
1. 예제용 DataFrame 생성하기
먼저 3개의 열(Car, Place, UnitsSold)을 가진 DataFrame을 생성해 보겠습니다.
import pandas as pd
dataFrame = pd.DataFrame({
'Car': ['BMW', 'Mercedes', 'Lamborghini', 'BMW', 'Mercedes', 'Porsche'],
'Place': ['Delhi', 'Hyderabad', 'Chandigarh', 'Delhi', 'Hyderabad', 'Mumbai'],
'UnitsSold': [85, 70, 80, 95, 55, 90]
})
print("DataFrame...\n", dataFrame)위 데이터를 보면 BMW-Delhi 조합과 Mercedes-Hyderabad 조합이 각각 두 번씩 등장합니다. 즉, 'Car'와 'Place' 열을 기준으로 볼 때 중복 행이 존재합니다.
2. keep='last'로 중복 제거하기
중복을 제거하면서 마지막 항목만 남기려면 keep 매개변수를 "last"로 설정합니다. 이렇게 하면 마지막 항목을 제외한 나머지 중복 행은 모두 삭제됩니다. 또한 subset 매개변수를 사용하여 중복 여부를 판단할 특정 열(하위 집합)을 지정할 수 있습니다.
dataFrame2 = dataFrame.drop_duplicates(
subset=['Car', 'Place'],
keep='last'
).reset_index(drop=True)
print("\n중복 제거 후 업데이트된 DataFrame...\n", dataFrame2)여기서 reset_index(drop=True)는 중복 행이 삭제된 후 인덱스를 0부터 다시 정렬해 주는 역할을 합니다.
3. 전체 예제 코드
import pandas as pd
# DataFrame 생성
dataFrame = pd.DataFrame({
'Car': ['BMW', 'Mercedes', 'Lamborghini', 'BMW', 'Mercedes', 'Porsche'],
'Place': ['Delhi', 'Hyderabad', 'Chandigarh', 'Delhi', 'Hyderabad', 'Mumbai'],
'UnitsSold': [85, 70, 80, 95, 55, 90]
})
print("DataFrame...\n", dataFrame)
# subset을 기준으로 중복 제거 후 마지막 항목만 표시
# keep='last' → 마지막 항목을 제외한 중복 행은 모두 삭제됨
dataFrame2 = dataFrame.drop_duplicates(
subset=['Car', 'Place'],
keep='last'
).reset_index(drop=True)
print("\n중복 제거 후 업데이트된 DataFrame...\n", dataFrame2)4. 실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
DataFrame...
Car Place UnitsSold
0 BMW Delhi 85
1 Mercedes Hyderabad 70
2 Lamborghini Chandigarh 80
3 BMW Delhi 95
4 Mercedes Hyderabad 55
5 Porsche Mumbai 90
중복 제거 후 업데이트된 DataFrame...
Car Place UnitsSold
0 Lamborghini Chandigarh 80
1 BMW Delhi 95
2 Mercedes Hyderabad 55
3 Porsche Mumbai 905. 결과 분석 및 참고 사항
출력 결과를 살펴보면 다음과 같은 변화가 있었습니다.
- BMW-Delhi 조합은 두 번 등장했지만, 마지막 항목(UnitsSold = 95)만 남고 첫 번째 항목(85)은 삭제되었습니다.
- Mercedes-Hyderabad 조합 역시 마지막 항목(UnitsSold = 55)만 유지되고 첫 번째 항목(70)은 제거되었습니다.
- 인덱스가
reset_index(drop=True)덕분에 0부터 순차적으로 재정렬되었습니다.
참고로 keep 매개변수에는 세 가지 값을 사용할 수 있습니다.
- keep='first': 중복 항목 중 첫 번째 항목만 유지 (기본값)
- keep='last': 중복 항목 중 마지막 항목만 유지
- keep=False: 중복된 모든 항목을 삭제
이처럼 drop_duplicates()의 subset과 keep 매개변수를 함께 활용하면, 원하는 열을 기준으로 중복을 손쉽게 제거하고 첫 번째 또는 마지막 항목을 선택적으로 남길 수 있습니다.