복붙노트

[PYTHON] 가치에 기반한 팬더 조회

PYTHON

가치에 기반한 팬더 조회

다음 DataFrame 있습니다 :

Date    best    a    b    c    d
1990    a       5    4    7    2
1991    c       10   1    2    0
1992    d       2    1    4    12
1993    a       5    8    11   6

다음과 같이 데이터 프레임을 만들고 싶습니다.

Date    best    value   
1990    a       5
1991    c       2
1992    d       12
1993    a       5

그래서 열 이름을 사용하여 다른 행 값을 기반으로 값을 찾으려고합니다. 예를 들어 두 번째 df에서 1990의 값은 첫 번째 df에서 "a"를 찾아야하고 두 번째 행은 첫 번째 df에서 "c"(= 2)를 조회해야합니다.

어떤 아이디어?

해결법

  1. ==============================

    1.이 유형의 상황을 처리 할 수있는 조회 기능이 내장되어 있습니다 (행 / 열을 조회). 얼마나 최적화되었는지는 모르겠지만 적용 솔루션보다 빠를 수 있습니다.

    이 유형의 상황을 처리 할 수있는 조회 기능이 내장되어 있습니다 (행 / 열을 조회). 얼마나 최적화되었는지는 모르겠지만 적용 솔루션보다 빠를 수 있습니다.

    In [9]: df['value'] = df.lookup(df.index, df['best'])
    
    In [10]: df
    Out[10]: 
       Date best   a  b   c   d  value
    0  1990    a   5  4   7   2      5
    1  1991    c  10  1   2   0      2
    2  1992    d   2  1   4  12     12
    3  1993    a   5  8  11   6      5
    
  2. ==============================

    2.당신은 lookup 함수를 생성하고 rowframe 방식으로 데이터 프레임에 apply를 호출합니다. 그러나 이것은 큰 dfs에서는 그리 효율적이지 않습니다.

    당신은 lookup 함수를 생성하고 rowframe 방식으로 데이터 프레임에 apply를 호출합니다. 그러나 이것은 큰 dfs에서는 그리 효율적이지 않습니다.

    In [245]:
    
    def lookup(x):
        return x[x.best]
    df['value'] = df.apply(lambda row: lookup(row), axis=1)
    df
    Out[245]:
       Date best   a  b   c   d  value
    0  1990    a   5  4   7   2      5
    1  1991    c  10  1   2   0      2
    2  1992    d   2  1   4  12     12
    3  1993    a   5  8  11   6      5
    
  3. from https://stackoverflow.com/questions/25935431/pandas-lookup-based-on-value by cc-by-sa and MIT license