Pandas DataFrame을 다룰 때 특정 열에 중복된 값이 포함되어 있고, 이 중 중복되지 않은 고유한 값만 추출하고 싶은 경우가 자주 있습니다. 이 글에서는 duplicated() 메서드와 논리 NOT 연산자(~)를 활용해 중복 값을 제거하고 고유한 행만 표시하는 방법을 알아보겠습니다.
1. 중복 값이 있는 DataFrame 생성
먼저 예제 실습을 위해 중복된 학생 이름이 포함된 DataFrame을 생성합니다. 'Student' 열에는 'Robin'과 'Ted'가 각각 두 번씩 등장합니다.
import pandas as pd
dataFrame = pd.DataFrame(
{
"Student": ['Jack', 'Robin', 'Ted', 'Robin', 'Scarlett', 'Kat', 'Ted'],
"Result": ['Pass', 'Fail', 'Pass', 'Fail', 'Pass', 'Pass', 'Pass']
}
)2. duplicated() 메서드로 중복 제거하기
중복되지 않은 값만 표시하려면 duplicated('Student') 메서드를 사용합니다. 이 메서드는 해당 열에서 중복으로 판별되는 행에 대해 True를 반환합니다. 여기에 논리 NOT 연산자인 물결표(~)를 붙이면 조건이 반전되어, 중복되지 않은 첫 번째 등장 값들만 선택됩니다.
dataFrame[~dataFrame.duplicated('Student')]3. 전체 예제 코드
다음은 위 과정을 하나로 정리한 완전한 코드입니다.
import pandas as pd
# DataFrame 생성
dataFrame = pd.DataFrame(
{
"Student": ['Jack', 'Robin', 'Ted', 'Robin', 'Scarlett', 'Kat', 'Ted'],
"Result": ['Pass', 'Fail', 'Pass', 'Fail', 'Pass', 'Pass', 'Pass']
}
)
print("DataFrame ...\n", dataFrame)
# 중복 제거 후 고유한 값만 표시
res = dataFrame[~dataFrame.duplicated('Student')]
print("\n중복 제거 후 DataFrame ...\n", res)4. 실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
DataFrame ...
Result Student
0 Pass Jack
1 Fail Robin
2 Pass Ted
3 Fail Robin
4 Pass Scarlett
5 Pass Kat
6 Pass Ted
중복 제거 후 DataFrame ...
Result Student
0 Pass Jack
1 Fail Robin
2 Pass Ted
4 Pass Scarlett
5 Pass Kat핵심 정리
duplicated('열이름')은 지정한 열 기준으로 중복 여부를 불리언(True/False) 시리즈로 반환합니다.~(논리 NOT)를 결합하면 중복이 아닌 행, 즉 각 값이 처음 등장하는 행만 필터링됩니다.- 기본 설정(
keep='first')에서는 각 값의 첫 번째 등장이 유지되며, 인덱스(0, 1, 2, 4, 5)에서 볼 수 있듯이 원본 인덱스가 그대로 보존됩니다. - 여러 열을 기준으로 중복을 판별하려면
duplicated(['열1', '열2'])처럼 리스트로 전달할 수 있습니다.
이 방법은 SQL의 DISTINCT와 유사한 역할을 하며, 대용량 데이터에서 고유 레코드를 빠르게 추출할 때 매우 유용합니다.