스택큐힙리스트

판다스 데이터프레임의 두 개의 열에 함수를 적용하는 방법 본문

카테고리 없음

판다스 데이터프레임의 두 개의 열에 함수를 적용하는 방법

스택큐힙리스트 2023. 11. 25. 11:25
반응형

다음과 같이 함수와 데이터프레임이 정의된 상황에서 고려해 봅시다:


def get_sublist(sta, end):
return mylist[sta:end+1]
df = pd.DataFrame({'ID':['1','2','3'], 'col_1': [0,2,3], 'col_2':[1,4,5]})
mylist = ['a','b','c','d','e','f']

이제 get_sublistdf의 두 열인 'col_1', 'col_2'에 적용하여 요소별로 새로운 열 'col_3'를 계산하여 다음과 같은 결과를 얻고 싶습니다:


  ID  col_1  col_2            col_3
0 1 0 1 ['a', 'b']
1 2 2 4 ['c', 'd', 'e']
2 3 3 5 ['d', 'e', 'f']

다음과 같이 시도해 봤지만:


df['col_3'] = df[['col_1','col_2']].apply(get_sublist, axis=1)

하지만 이렇게 하면 결과는 다음과 같습니다:

TypeError: get_sublist() missing 1 required positional argument:

어떻게 해야 하나요?

답변 1

이 작업을 Pandas에서 깨끗하고 한 줄로 처리하는 방법이 있습니다:


df['col_3'] = df.apply(lambda x: f(x.col_1, x.col_2), axis=1)

이는 여러 입력 값이 있는 사용자 정의 함수 f를 사용하며 열에 접근할 때 (안전한) 열 이름을 사용하는 것입니다.


데이터를 사용한 예제 (원래 질문을 기반으로 함):


import pandas as pd
df = pd.DataFrame({'ID':['1', '2', '3'], 'col_1': [0, 2, 3], 'col_2':[1, 4, 5]})
mylist = ['a', 'b', 'c', 'd', 'e', 'f']
def get_sublist(sta,end):
return mylist[sta:end+1]
df['col_3'] = df.apply(lambda x: get_sublist(x.col_1, x.col_2), axis=1)

print(df)의 출력 결과:


  ID  col_1  col_2      col_3
0 1 0 1 [a, b]
1 2 2 4 [c, d, e]
2 3 3 5 [d, e, f]

열 이름에 공백이 포함되거나 기존 데이터프레임 속성과 이름이 같은 경우, 대괄호를 사용하여 인덱싱할 수 있습니다:

df['col_3'] = df.apply(lambda x: f(x['col 1'], x['col 2']), axis=1)

다음과 같이 번역할 수 있습니다:

답변 2

판다스 데이터프레임의 두 열에 함수를 적용하는 방법을 알아보겠습니다. 데이터프레임은 파이썬에서 많이 사용되는 데이터 구조로, 표 형식으로 데이터를 관리하고 분석하는 데 유용합니다. 판다스는 이러한 데이터프레임을 다루기 위한 파이썬 라이브러리입니다.
함수를 판다스 데이터프레임의 두 열에 적용하기 위해서는 apply() 메서드를 사용합니다. apply() 메서드는 주어진 함수를 데이터프레임의 열 또는 행에 적용할 수 있습니다. 이를 이용하면 사용자 정의 함수를 작성하여 데이터프레임의 열에 대해 연산을 수행할 수 있습니다.
예를 들어, 다음과 같은 데이터프레임이 있다고 가정해봅시다.
```
import pandas as pd
data = {'A': [1, 2, 3, 4, 5],
'B': [6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
```
위의 예제에서는 'A' 열과 'B' 열의 값을 더하는 함수를 생성하고, 이를 apply() 메서드를 사용하여 데이터프레임에 적용해 보겠습니다.
```
def sum_columns(row):
return row['A'] + row['B']
df['Sum'] = df.apply(sum_columns, axis=1)
```
위 코드에서는 sum_columns라는 사용자 정의 함수를 만들어서 'A' 열과 'B' 열의 값을 더합니다. 그리고 apply() 메서드에 이 함수를 전달하고, axis=1을 설정하여 함수를 열 단위로 적용합니다. 이렇게 실행하면, 'Sum' 열이 추가되고 'A' 열과 'B' 열의 값을 더한 결과가 해당 열에 저장됩니다.
데이터프레임의 두 열에 적용할 함수가 없는 경우에도 apply() 메서드를 사용하여 다양한 내장 함수를 적용할 수 있습니다. 예를 들어, 'A' 열과 'B' 열의 합을 구하기 위해서는 다음과 같이 간단하게 코드를 작성할 수 있습니다.
```
df['Sum'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
```
위 코드에서는 람다 함수를 사용하여 'A' 열과 'B' 열의 값을 더하고, 이 결과를 'Sum' 열에 저장합니다.
판다스 데이터프레임의 두 열에 함수를 적용하는 방법에 대해 알아보았습니다. apply() 메서드를 사용하여 사용자 정의 함수나 내장 함수를 데이터프레임에 적용하면, 원하는 결과를 손쉽게 얻을 수 있습니다. 이를 활용하여 데이터프레임의 열을 효율적으로 처리하고 분석할 수 있습니다.

반응형
Comments