Pandas 데이터프레임에서 기존 열 기반으로 새 열 만들기
Pandas 데이터프레임에서 기존 열의 값을 기준으로 새 열을 생성하는 방법은 여러 가지가 있습니다. 몇 가지 일반적인 방법과 코드 예시를 살펴보겠습니다.
1 apply 함수 사용
apply
함수는 데이터프레임의 각 행 또는 열에 함수를 적용하는 데 유용합니다. 새 열을 만들 때도 apply
함수를 활용하여 기존 열의 값을 변환하거나 조건에 따라 새로운 값을 생성하는 함수를 적용할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'기존 열': [1, 2, 3, 4, 5]})
# 새 열 생성 (기존 열 값에 따라 0 또는 1 할당)
df['새로운 열'] = df['기존 열'].apply(lambda x: 0 if x % 2 == 0 else 1)
print(df)
2 조건문 사용
특정 조건을 충족하는 행에만 새 열에 값을 할당하고 싶은 경우, 조건문을 사용하여 직접적으로 구현할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'기존 열': [1, 2, 3, 4, 5]})
# 새 열 생성 (기존 열 값이 3보다 큰 경우 100 할당)
df['새로운 열'] = np.where(df['기존 열'] > 3, 100, df['기존 열'])
print(df)
3 loc 인덱싱 사용
loc
인덱싱을 사용하면 특정 행 또는 열을 기준으로 데이터프레임을 자르거나 새로운 데이터를 할당할 수 있습니다. 새 열을 만들 때도 loc
인덱싱을 활용하여 기존 열의 값을 활용하여 새로운 값을 생성하고 할당할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'기존 열': [1, 2, 3, 4, 5]})
# 새 열 생성 (기존 열 값이 짝수인 행에 100 할당)
df['새로운 열'] = 100
df.loc[df['기존 열'] % 2 == 0, '새로운 열'] = df['기존 열'][df['기존 열'] % 2 == 0]
print(df)
여러 기존 열을 활용하여 새 열 생성하기
여러 기존 열의 값을 함께 사용하여 새 열을 생성하는 경우도 있습니다. 이 경우, apply
함수와 lambda 표현식을 활용하거나, 여러 열을 조합하여 새로운 열을 만들 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'열1': [1, 2, 3, 4, 5], '열2': ['a', 'b', 'c', 'd', 'e']})
# 새 열 생성 (열1 값과 열2 값을 연결하여 새로운 문자열 생성)
df['새로운 열'] = df.apply(lambda row: f'{row["열1"]}-{row["열2"]}', axis=1)
print(df)
주의 사항
- 새 열을 만들 때 기존 열의 데이터 타입을 고려해야 합니다.
- 조건에 따라 다른 데이터 타입을 할당해야 하는 경우,
astype
함수를 사용하여 데이터 타입을 변환할 수 있습니다. - 새 열을 생성하는 방법은 다양하며, 상황에 따라 적절한 방법을 선택해야 합니다.
import pandas as pd
# 데이터 생성
data = {'이름': ['철수', '영희', '민수', '고길동', '김철수'],
'나이': [25, 23, 30, 27, 28],
'소득': [1000000, 2000000, 3000000, 4000000, 5000000]}
df = pd.DataFrame(data)
# 조건에 따라 새로운 열 '고소득' 생성
df['고소득'] = df['소득'] > 3000000
# 출력
print(df)
pandas
라이브러리를 불러옵니다.data
라는 딕셔너리를 생성합니다. 딕셔너리에는 '이름', '나이', '소득'이라는 키와 각 키에 해당하는 값들이 리스트 형태로 저장됩니다.data
딕셔너리를 사용하여df
라는 데이터프레임을 생성합니다.df['고소득'] = df['소득'] > 3000000
코드를 사용하여 '고소득'이라는 새로운 열을 생성합니다. 이 열은 '소득' 열의 값이 3000000보다 크면 True, 그렇지 않으면 False로 채워집니다.print(df)
코드를 사용하여 데이터프레임을 출력합니다. 이제 '고소득' 열이 추가되어 출력됩니다.
결과
이름 나이 소득 고소득
0 철수 25 1000000 False
1 영희 23 2000000 False
2 민수 30 3000000 True
3 고길동 27 4000000 True
4 김철수 28 5000000 True
추가 예제
다음은 여러 기존 열을 사용하여 새로운 열을 만드는 예제입니다.
import pandas as pd
# 데이터 생성
data = {'이름': ['철수', '영희', '민수', '고길동', '김철수'],
'나이': [25, 23, 30, 27, 28],
'소득': [1000000, 2000000, 3000000, 4000000, 5000000],
'성별': ['남', '여', '남', '남', '남']}
df = pd.DataFrame(data)
# 새로운 열 '성별소득' 생성 (성별과 소득을 연결하여 새로운 문자열 생성)
df['성별소득'] = df['성별'] + '-' + df['소득'].astype(str)
# 출력
print(df)
이름 나이 소득 성별 성별소득
0 철수 25 1000000 남 남-1000000
1 영희 23 2000000 여 여-2000000
2 민수 30 3000000 남 남-3000000
3 고길동 27 4000000 남 남-4000000
4 김철수 28 5000000 남 남-5000000
Pandas 데이터프레임에서 기존 열 기반으로 새 열 만들기: 대체 방법
map 함수 사용
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'기존 열': [1, 2, 3, 4, 5]})
# 새 열 생성 (기존 열 값에 따라 0 또는 1 할당)
df['새로운 열'] = df['기존 열'].map(lambda x: 0 if x % 2 == 0 else 1)
print(df)
groupby 사용
groupby
함수는 데이터프레임을 특정 열을 기준으로 그룹화하여 집계 연산을 수행하는 데 사용됩니다. 새 열을 만들 때도 groupby
함수를 활용하여 그룹별 집계 결과를 새로운 열에 할당하거나, 그룹 내 데이터를 기준으로 새로운 값을 생성할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'기존 열': [1, 2, 3, 4, 5], '그룹': ['A', 'A', 'B', 'B', 'A']})
# 새 열 생성 (그룹별 '기존 열' 평균값 계산)
df['새로운 열'] = df.groupby('그룹')['기존 열'].mean()
print(df)
idxmax/idxmin 사용
특정 열의 값을 기준으로 최대값 또는 최소값을 찾아 새로운 열에 할당하는 경우 idxmax
또는 idxmin
함수를 활용할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'열1': [1, 2, 3, 4, 5], '열2': [5, 4, 3, 2, 1]})
# 새 열 생성 (열1 기준 최대값 열2 값 할당)
df['새로운 열'] = df['열2'].iloc[df['열1'].idxmax()]
print(df)
melt/pivot_table 사용
데이터프레임의 구조를 변경하여 새 열을 생성하는 방법도 있습니다. melt
함수는 데이터프레임을 열과 행을 재구성하는 데 유용하고, pivot_table
함수는 데이터프레임을 교차표 형태로 변환하여 집계 결과를 새로운 열로 만들 수 있습니다.
직접적인 계산
새로운 열을 만들기 위해 기존 열을 직접 계산하는 경우도 있습니다. 산술 연산, 논리 연산 등을 활용하여 원하는 결과를 도출할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'기존 열1': [1, 2, 3, 4, 5], '기존 열2': [5, 4, 3, 2, 1]})
# 새 열 생성 (기존 열1과 기존 열2의 합 계산)
df['새로운 열'] = df['기존 열1'] + df['기존 열2']
print(df)
python pandas dataframe