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

Python Pandas – 중복 없이 DataFrame 연결하는 방법

Pandas에서 여러 개의 DataFrame을 하나로 합치려면 concat() 메서드를 사용합니다. 이때 연결 과정에서 발생하는 중복된 행까지 한 번에 제거하고 싶다면 drop_duplicates() 메서드를 함께 활용하면 됩니다.

1. 필요한 라이브러리 임포트

먼저 pandas 라이브러리를 임포트합니다.

import pandas as pd

2. 연결할 DataFrame 생성

예제로 사용할 두 개의 DataFrame을 만들어 보겠습니다. 두 DataFrame에는 일부러 동일한 데이터(Jaguar, Mustang)를 포함시켰습니다.

# DataFrame1 생성
dataFrame1 = pd.DataFrame(
    {
        "Car": ['BMW', 'Jaguar', 'Audi', 'Mustang'],
        "Units": [100, 150, 110, 80]
    }
)

# DataFrame2 생성
dataFrame2 = pd.DataFrame(
    {
        "Car": ['Tesla', 'Jaguar', 'Mercedes', 'Mustang'],
        "Units": [120, 150, 180, 80]
    }
)

3. DataFrame 연결 후 중복 제거

pd.concat()으로 두 DataFrame을 세로 방향으로 연결한 뒤, 바로 이어서 drop_duplicates()를 호출하면 모든 열의 값이 완전히 동일한 중복 행이 제거됩니다.

concatRes = pd.concat([dataFrame1, dataFrame2]).drop_duplicates()

위 예제에서는 'Jaguar'(150개)와 'Mustang'(80개) 행이 두 DataFrame에 모두 존재하므로, 각각 한 번씩만 남게 됩니다.

전체 예제 코드

import pandas as pd

# DataFrame1 생성
dataFrame1 = pd.DataFrame(
    {
        "Car": ['BMW', 'Jaguar', 'Audi', 'Mustang'],
        "Units": [100, 150, 110, 80]
    }
)
print("DataFrame1 ...\n", dataFrame1)

# DataFrame2 생성
dataFrame2 = pd.DataFrame(
    {
        "Car": ['Tesla', 'Jaguar', 'Mercedes', 'Mustang'],
        "Units": [120, 150, 180, 80]
    }
)
print("\nDataFrame2 ...\n", dataFrame2)

# DataFrame 연결 후 중복 제거
concatRes = pd.concat([dataFrame1, dataFrame2]).drop_duplicates()
print("\n중복 없이 연결된 DataFrame...\n", concatRes)

실행 결과

DataFrame1 ...
       Car  Units
0     BMW    100
1  Jaguar    150
2    Audi    110
3 Mustang     80

DataFrame2 ...
       Car  Units
0   Tesla    120
1  Jaguar    150
2 Mercedes    180
3  Mustang     80

중복 없이 연결된 DataFrame...
       Car  Units
0     BMW    100
1  Jaguar    150
2    Audi    110
3  Mustang     80
0   Tesla    120
2 Mercedes    180

추가 팁: 인덱스 재설정하기

실행 결과를 보면 원본 DataFrame의 인덱스(0, 1, 2, 3 / 0, 2)가 그대로 유지되는 것을 확인할 수 있습니다. 연결 후 인덱스를 0부터 새로 매기고 싶다면 ignore_index=True 옵션을 사용하세요.

concatRes = pd.concat([dataFrame1, dataFrame2], ignore_index=True).drop_duplicates()

이렇게 하면 중복이 제거된 깔끔한 DataFrame을 연속적인 인덱스와 함께 얻을 수 있습니다.