반응형
새로운 판다 칼럼을 만들기 위해 여러 인수가 있는 기능 적용
에 새 열을 만들고 싶다.pandas
두 개의 기존 열에 함수를 적용하여 데이터 프레임을 만듭니다.다음 답변에 따라 하나의 열만 인수로 사용하면 새 열을 만들 수 있습니다.
import pandas as pd
df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})
def fx(x):
return x * x
print(df)
df['newcolumn'] = df.A.apply(fx)
print(df)
그러나 함수에 여러 개의 인수가 필요한 경우 동일한 작업을 수행하는 방법을 알 수 없습니다.예를 들어 A열과 B열을 아래 함수에 전달하여 새로운 열을 작성하려면 어떻게 해야 합니까?
def fxy(x, y):
return x * y
함수를 다시 작성할 수 있다면 @greenAfrican의 예를 들 수 있습니다.그러나 함수를 다시 작성하지 않으려면 다음과 같이 Apply 내에서 익명 함수로 래핑할 수 있습니다.
>>> def fxy(x, y):
... return x * y
>>> df['newcolumn'] = df.apply(lambda x: fxy(x['A'], x['B']), axis=1)
>>> df
A B newcolumn
0 10 20 200
1 20 30 600
2 30 10 300
또는 numpy 기본 함수를 사용할 수 있습니다.
>>> import numpy as np
>>> df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})
>>> df['new_column'] = np.multiply(df['A'], df['B'])
>>> df
A B new_column
0 10 20 200
1 20 30 600
2 30 10 300
또는 일반적인 경우 임의 함수를 벡터화합니다.
>>> def fx(x, y):
... return x*y
...
>>> df['new_column'] = np.vectorize(fx)(df['A'], df['B'])
>>> df
A B new_column
0 10 20 200
1 20 30 600
2 30 10 300
이것으로 문제가 해결됩니다.
df['newcolumn'] = df.A * df.B
다음 작업도 가능합니다.
def fab(row):
return row['A'] * row['B']
df['newcolumn'] = df.apply(fab, axis=1)
여러 열을 동시에 작성해야 하는 경우:
데이터 프레임을 만듭니다.
import pandas as pd df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})
함수를 만듭니다.
def fab(row): return row['A'] * row['B'], row['A'] + row['B']
새 열 할당:
df['newcolumn'], df['newcolumn2'] = zip(*df.apply(fab, axis=1))
하나 더 dict 스타일 클린 구문:
df["new_column"] = df.apply(lambda x: x["A"] * x["B"], axis = 1)
또는,
df["new_column"] = df["A"] * df["B"]
이를 통해 원하는 결과를 동적으로 얻을 수 있습니다.두 개 이상의 주장이 있는 경우에도 효과가 있습니다.
df['anothercolumn'] = df[['A', 'B']].apply(lambda x: fxy(*x), axis=1)
print(df)
A B newcolumn anothercolumn
0 10 20 100 200
1 20 30 400 600
2 30 10 900 300
언급URL : https://stackoverflow.com/questions/19914937/applying-function-with-multiple-arguments-to-create-a-new-pandas-column
반응형
'programing' 카테고리의 다른 글
MySQL에서 주별로 그룹화하는 방법 (0) | 2022.09.21 |
---|---|
FreeBSD 분기 바이너리 mariadb101-server가 없습니다. 이유가 무엇입니까? (0) | 2022.09.21 |
도커 마리아 데이터베이스에 접속하려면 어떻게 해야 하나요? (0) | 2022.09.21 |
MySQL find_in_set(복수 검색 문자열 포함) (0) | 2022.09.21 |
장고 모델() 대 Model.objects.create() (0) | 2022.09.21 |