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() 등을 활용하면 여러 개의 조건 분기도 손쉽게 처리할 수 있습니다.