Programming

팬더 : 단일 열에 apply () 함수를 어떻게 사용할 수 있습니까?

procodes 2020. 5. 12. 20:20
반응형

팬더 : 단일 열에 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.

참고URL : https://stackoverflow.com/questions/34962104/pandas-how-can-i-use-the-apply-function-for-a-single-column

반응형