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

Python Pandas – 조건에 따라 데이터프레임에 새로운 열 추가하기

Pandas는 Python 프로그램에서 데이터를 효율적으로 처리하기 위해 데이터프레임(DataFrame)을 활용합니다. 이 글에서는 기존 데이터프레임에 특정 조건을 기반으로 새로운 열을 추가하는 방법을 단계별로 살펴보겠습니다.

예제 데이터프레임 준비하기

먼저 새로운 열을 추가할 대상이 되는 pandas 데이터프레임을 만들어 보겠습니다. 이 데이터프레임은 시험의 요일과 과목 정보를 담고 있습니다.

코드 예제

import pandas as pd

# 시험 요일 및 과목 리스트
Days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
Sub = ['Chemistry', 'Physics', 'Maths', 'English', 'Biology']

# 시험 일정 딕셔너리
Exam_Subjects = {'Exam Day': Days,
                 'Exam Subject': Sub}

# 딕셔너리를 데이터프레임으로 변환
Exam_Subjects_df = pd.DataFrame(Exam_Subjects)
print(Exam_Subjects_df)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

    Exam Day  Exam Subject
0   Mon       Chemistry
1   Tue       Physics
2   Wed       Maths
3   Thu       English
4   Fri       Biology

조건을 적용한 새로운 열 추가하기

이번에는 시험 시간을 나타내는 'Time' 열을 추가해 보겠습니다. 리스트 컴프리헨션(list comprehension) 안에 if 조건문을 사용하여, 요일이 월요일(Mon) 또는 목요일(Thu)이면 '2 PM'을, 그 외의 요일이면 '10 AM'을 할당하도록 작성합니다.

코드 예제

import pandas as pd

# 시험 요일 및 과목 리스트
Days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
Sub = ['Chemistry', 'Physics', 'Maths', 'English', 'Biology']

# 시험 일정 딕셔너리
Exam_Subjects = {'Exam Day': Days,
                 'Exam Subject': Sub}

# 딕셔너리를 데이터프레임으로 변환
Exam_Subjects_df = pd.DataFrame(Exam_Subjects)

# 조건에 따라 Time 열 생성
Exam_Subjects_df['Time'] = ['2 PM' if x in ('Mon', 'Thu') else '10 AM'
                            for x in Exam_Subjects_df['Exam Day']]
print(Exam_Subjects_df)

실행 결과

위 코드를 실행하면 각 행의 요일 값에 따라 조건이 평가되어, 새로운 'Time' 열이 자동으로 채워집니다.

  Exam Day   Exam Subject  Time
0  Mon       Chemistry      2 PM
1  Tue       Physics       10 AM
2  Wed       Maths         10 AM
3  Thu       English       2 PM
4  Fri       Biology       10 AM

동작 원리 정리

핵심 코드인 ['2 PM' if x in ('Mon', 'Thu') else '10 AM' for x in Exam_Subjects_df['Exam Day']]는 다음과 같이 동작합니다.

① 'Exam Day' 열의 값을 하나씩 순회하고, ② 해당 값이 'Mon' 또는 'Thu'에 포함되면 '2 PM'을, 그렇지 않으면 '10 AM'을 반환하여 새로운 리스트를 만듭니다. ③ 이 리스트가 곧바로 'Time'이라는 이름의 새 열로 데이터프레임에 추가됩니다.

참고로 조건이 더 복잡해지면 NumPy의 np.where()나 pandas의 apply(), np.select() 등을 활용하면 여러 개의 조건 분기도 손쉽게 처리할 수 있습니다.