>source

데이터 프레임이 있습니다

ID | calls_to_cust| 1 | 2 |  3| 4  | 5
 123| 3            | 43| 12| 12| 3  | 42
 133| 2            | 42| 32| 13| 4  | 7
 134| 6            | 42| 32| 13| 4  | 7

내 결과는 다음과 같아야합니다

ID | calls_to_cust| 1 | 2 |  3| 4  | 5   |value
 123| 3            | 43| 12| 12| 3  | 42  |12
 133| 2            | 42| 32| 13| 4  | 7   |32
 134| 6            | 42| 32| 13| 4  | 7   |7

나는 가치를 찾고 싶다.call_to_cust.열 머리글에서 해당 행 및 열 번호의 일치 값을 새 열에있는 값으로 사용하십시오.

def match(x):
    for i in x.columns:
        if x['total_calls_hcp']== i:
            return i.value()
    else:
        return 0

나는 작문을 시도했지만 그것이 작동하지 않습니다. 값이 float이고 오류를 던지기 때문에 df.lookup을 사용할 수 없습니다.

편집 : 값이 존재하지 않으면 최대 값을 가져 오려고합니다.

  • 답변 # 1

    여기에서 numpy를 사용하여이를 벡터화 할 수 있습니다.index.get_indexer.열의 인덱스를 찾으려면 열이 문자열이 아니라 int가 아닌 경우 문자열로 값을 변환하는 맵 (str)

    df['value']= df.to_numpy()[df.index,df.columns.get_indexer(df['calls_to_cust'].map(str))]
    


    print(df)
        ID  calls_to_cust   1   2   3  4   5  value
    0  123              3  43  12  12  3  42     12
    1  133              2  42  32  13  4   7     32
    

  • 답변 # 2

    NUMPY 인덱싱을 사용하여 조회 할 수 있습니다.

    import numpy as np
    idx, cols= pd.factorize(df['calls_to_cust'])
    df['value']= df.reindex(cols, axis=1).to_numpy()[np.arange(len(df)), idx]
    

    ​​DF.:

      ID  calls_to_cust   1   2   3  4   5  value
    0  123              3  43  12  12  3  42     12
    1  133              2  42  32  13  4   7     32
    

  • 답변 # 3

    시도 :

    df["value"]= df.apply(lambda x: x[str(x["calls_to_cust"])], axis=1)
    print(df)
    

    인쇄 :

      ID  calls_to_cust   1   2   3  4   5  value
    0  123              3  43  12  12  3  42     12
    1  133              2  42  32  13  4   7     32
    

  • 이전 android : 목록보기를 만들 필요가 없지만 오류가 있습니다.
  • 다음 php : 10 개의 레code를 가져 와서 Laravel에서 10 개의 레code를 건너 뜁니다