Pandas를 사용하여 여러 인수가 있는 함수를 적용하여 새 열 만들기
방법 1: apply()
함수 사용
apply()
함수는 Pandas에서 DataFrame 또는 Series에 함수를 적용하는 데 사용되는 강력한 도구입니다. 이 함수는 각 행 또는 열에 함수를 순환적으로 적용하여 새 열 또는 Series를 만들 수 있습니다.
여러 인수가 있는 함수를 적용하려면 apply()
함수와 함께 익명 함수 또는 lambda 표현식을 사용할 수 있습니다. 예를 들어, 다음 코드는 add_two_numbers()
함수를 사용하여 두 열을 더하고 새 열을 만듭니다.
import pandas as pd
def add_two_numbers(a, b):
return a + b
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df['C'] = df.apply(lambda row: add_two_numbers(row['A'], row['B']), axis=1)
print(df)
이 코드는 다음과 같은 출력을 생성합니다:
A B C
0 1 4 5
1 2 5 7
2 3 6 9
apply()
함수는 또한 추가 인수를 전달할 수 있습니다. 이러한 인수는 익명 함수 또는 lambda 표현식 내에서 사용할 수 있습니다. 예를 들어, 다음 코드는 multiply_three_numbers()
함수를 사용하여 세 개의 열을 곱하고 새 열을 만듭니다.
def multiply_three_numbers(a, b, c, factor):
return a * b * c * factor
df['D'] = df.apply(lambda row: multiply_three_numbers(row['A'], row['B'], row['C'], factor=2), axis=1)
print(df)
A B C D
0 1 4 5 40
1 2 5 7 140
2 3 6 9 288
방법 2: map()
함수 사용
map()
함수는 Pandas에서 Series에 함수를 적용하는 데 사용됩니다. 이 함수는 각 값에 함수를 순환적으로 적용하여 새 Series를 만듭니다.
import pandas as pd
def add_two_numbers(a, b):
return a + b
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df['C'] = df[['A', 'B']].apply(lambda x: add_two_numbers(x[0], x[1]), axis=1)
print(df)
이 코드는 apply()
함수를 사용한 예제와 동일한 출력을 생성합니다.
방법 3: 벡터화된 작업 사용
일부 함수는 Pandas에서 벡터화됩니다. 즉, 이러한 함수는 Pandas 객체에 직접 적용할 수 있으며 각 값에 대해 자동으로 루프됩니다. 예를 들어, pd.add()
함수는 두 Series 또는 DataFrame을 벡터 방식으로 더합니다.
다음 코드는 pd.add()
함수를 사용하여 두 열을 더하고 새 열을 만듭니다.
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df['C'] = df['A'] + df['B']
print(df)
선택 방법
사용할 방법은 특정 상황에 따라 다릅니다. 일반적으로 다음 지침을 따르십시오.
- 함수가 벡터화된 경우 벡터화된 작업을 사용하십시오. 이는 일반적으로 가장 빠르고 효율적인
예제 코드
예제 1: apply()
함수 사용
import pandas as pd
def add_two_numbers(a, b):
return a + b
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df['C'] = df.apply(lambda row: add_two_numbers(row['A'], row['B']), axis=1)
print(df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
예제 2: map()
함수 사용
import pandas as pd
def add_two_numbers(a, b):
return a + b
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df['C'] = df[['A', 'B']].apply(lambda x: add_two_numbers(x[0], x[1]), axis=1)
print(df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
예제 3: 벡터화된 작업 사용
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df['C'] = df['A'] + df['B']
print(df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
이 세 가지 예제는 모두 동일한 결과를 생성합니다. 그러나 각 코드는 약간 다르게 작성됩니다. apply()
함수는 가장 일반적인 방법이지만 가장 느린 방법일 수 있습니다. map()
함수는 apply()
함수보다 빠르지만 일부 상황에서는 사용하기 어려울 수 있습니다. 벡터화된 작업은 가장 빠르고 효율적이지만 모든 함수에 사용할 수 있는 것은 아닙니다.
Pandas에서 새 열을 만드는 대체 방법
assign() 함수 사용
assign()
함수는 DataFrame에 새 열을 할당하는 데 사용할 수 있는 간편한 방법입니다. 이 함수는 새 열 이름과 새 열 값을 딕셔너리 형식으로 전달합니다.
예를 들어 다음 코드는 add_two_numbers()
함수를 사용하여 두 열을 더하고 새 열을 만듭니다.
import pandas as pd
def add_two_numbers(a, b):
return a + b
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df = df.assign(C=df.apply(lambda row: add_two_numbers(row['A'], row['B']), axis=1))
print(df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
concat() 함수 사용
concat()
함수는 두 DataFrame을 연결하는 데 사용할 수도 있지만 새 열을 만드는 데에도 사용할 수 있습니다. 이를 수행하려면 새 열을 포함하는 새 DataFrame을 만들고 기존 DataFrame에 연결합니다.
import pandas as pd
def add_two_numbers(a, b):
return a + b
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
new_df = pd.DataFrame({'C': df.apply(lambda row: add_two_numbers(row['A'], row['B']), axis=1)})
df = pd.concat([df, new_df], axis=1)
print(df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
직접 할당 사용
새 열을 만드는 가장 간단한 방법은 직접 할당을 사용하는 것입니다. 이를 수행하려면 새 열 이름을 사용하여 새 열을 DataFrame에 할당합니다. 새 열 값은 Series 또는 리스트일 수 있습니다.
import pandas as pd
def add_two_numbers(a, b):
return a + b
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df['C'] = df.apply(lambda row: add_two_numbers(row['A'], row['B']), axis=1)
print(df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
결론
Pandas에서 새 열을 만드는 데는 여러 가지 방법이 있습니다. 사용할 방법은 특정 상황에 따라 다릅니다. 일반적으로 다음 지침을 따르십시오.
- 새 열이 기존 열에 대한 간단한 계산인 경우
assign()
함수를 사용하십시오. - 새 열이 두 DataFrame의 연결인 경우
concat()
함수를 사용하십시오. - 다른 모든 경우 직접 할당을 사용하십시오.
python pandas