팬더 : 단일 열에 apply () 함수를 어떻게 사용할 수 있습니까?
두 개의 열이있는 팬더 데이터 프레임이 있습니다. 두 번째 열에 영향을 미치지 않고 첫 번째 열의 값을 변경하고 첫 번째 열 값만 변경하여 전체 데이터 프레임을 다시 가져와야합니다. 팬더에서 apply를 사용하여 어떻게 할 수 있습니까?
샘플 데이터 프레임 df
은 다음과 같습니다.
a,b
1,2
2,3
3,4
4,5
당신이 원하는 것은 :
df['a'] = df['a'].apply(lambda x: x + 1)
그 결과는 다음과 같습니다.
a b
0 2 2
1 3 3
2 4 4
3 5 5
다음과 같이 단일 컬럼을 사용하는 것이 좋습니다 map()
.
df = pd.DataFrame([{'a': 15, 'b': 15, 'c': 5}, {'a': 20, 'b': 10, 'c': 7}, {'a': 25, 'b': 30, 'c': 9}])
a b c
0 15 15 5
1 20 10 7
2 25 30 9
df['a'] = df['a'].map(lambda a: a / 2.)
a b c
0 7.5 15 5
1 10.0 10 7
2 12.5 30 9
전혀 기능이 필요하지 않습니다. 전체 열에서 직접 작업 할 수 있습니다.
데이터 예 :
>>> df = pd.DataFrame({'a': [100, 1000], 'b': [200, 2000], 'c': [300, 3000]})
>>> df
a b c
0 100 200 300
1 1000 2000 3000
열의 모든 값의 절반 a
:
>>> df.a = df.a / 2
>>> df
a b c
0 50 200 300
1 500 2000 3000
주어진 응답은 정확하지만 초기 데이터 프레임을 수정하는 것은 항상 바람직하지는 않습니다. OP가 "using apply
" 을 예로 요청한 경우 새 데이터 프레임을 반환하는 버전을 원할 수도 있습니다 apply
.
이것은 다음을 사용하여 가능합니다 assign
: assign
설명서에 나와있는 것처럼 기존 열에 유효합니다 (강조는 내 것입니다).
DataFrame에 새 열을 할당하십시오.
새 열 외에 모든 원래 열이 있는 새 개체 를 반환 합니다. 재 할당 된 기존 열을 덮어 씁니다 .
한마디로 :
In [1]: import pandas as pd
In [2]: df = pd.DataFrame([{'a': 15, 'b': 15, 'c': 5}, {'a': 20, 'b': 10, 'c': 7}, {'a': 25, 'b': 30, 'c': 9}])
In [3]: df.assign(a=lambda df: df.a / 2)
Out[3]:
a b c
0 7.5 15 5
1 10.0 10 7
2 12.5 30 9
In [4]: df
Out[4]:
a b c
0 15 15 5
1 20 10 7
2 25 30 9
함수는 수정하려는 열뿐만 아니라 전체 데이터 프레임에 전달되므로 람다에서 올바른 열을 선택해야합니다.
If you are really concerned about the execution speed of your apply function and you have a huge dataset to work on, you could use swifter to make faster execution, here is an example for swifter on pandas dataframe:
import pandas as pd
import swifter
def fnc(m):
return m*3+4
df = pd.DataFrame({"m": [1,2,3,4,5,6], "c": [1,1,1,1,1,1], "x":[5,3,6,2,6,1]})
# apply a self created function to a single column in pandas
df["y"] = df.m.swifter.apply(fnc)
This will enable your all CPU cores to compute the result hence it will be much faster than normal apply functions. Try and let me know if it become useful for you.
'Programming' 카테고리의 다른 글
사용자가 매핑 한 섹션이 열린 파일에서 요청한 작업을 수행 할 수 없습니다. (0) | 2020.05.12 |
---|---|
PHP 클래스 생성자가 부모의 부모 생성자를 호출하도록하려면 어떻게해야합니까? (0) | 2020.05.12 |
소스 트리-푸시되지 않은 커밋 실행 취소 (0) | 2020.05.12 |
F- 문자열로 소수점 이하의 고정 숫자 (0) | 2020.05.12 |
SELECT 문에서 NOLOCK 힌트의 영향 (0) | 2020.05.12 |