2016-11-28 1 views
4

가장 높은 가중치를 선택하기위한 고급 방법 I은파이썬 - 세트

l = ['xyz','abc','mnq','qpr'] 

이러한 값이되도록 xyz>abc>mnq>qpr 는 I 값들의 세트를 갖는 열이있는 팬더 dataframe가 가중되는 등의 목록을 갖는다.

     COL_NAME  
0   set(['xyz', 'abc'])  
1   set(['xyz']) 
2   set(['mnq','qpr']) 

는 지금, 나는 의지하지 않고이 과정을 수행하는 우아한 방법이 있나요 나는 사용자 정의 기능을 적용한 후에 내가

    COL_NAME  
0   set(['xyz'])  
1   set(['xyz']) 
2   set(['mnq']) 

왼쪽 오전 있도록 세트로 가장 높은 값을 선택하려면 가중치 사전?

+2

은 그때는 아마 {최대 ({ 'XYZ', 'ABC'}, 키 = your_function)}' –

+0

미안 내가 편집 한 내 질문에'처럼 뭔가를 할 수 조금. 바라기를, 나는 지금 훨씬 감을 만들고있다. 위에서 설명한 기능에 대한 필요성이 있지만 가장 좋은 방법은 무엇인지 잘 모릅니다. – Fizi

+1

가중치를 기준으로 최대 값을 반환하는 함수를 작성한 다음 max()를 사용하여 추출합니다. – wwii

답변

3

매개 변수가 ordered=Truepd.Categorical을 사용하고 categories=l[::-1]을 설정하여 원하는 주문을 얻을 수 있습니다. 당신은 키 기능으로 사용자 정의 함수를 만들 수 있다면

def max_cat(x): 
    return set([pd.Categorical(x, l[::-1], True).max()]) 

df.COL_NAME.apply(max_cat) 

0 {xyz} 
1 {xyz} 
2 {mnq} 
Name: COL_NAME, dtype: object 
+0

링크가 추가되었습니다. 당신이 반대하지 않기를 바랍니다. –

+0

@MadPhysicist 전혀 아닙니다 – piRSquared

+0

이것은 내가 찾고있는 것입니다. 후속 질문이있을 수 있습니다 :) 정당한 하나의 에라타 - 반환 값을 설정해야합니다 ([pd.Categorical (x, l [:: - 1], True) .max()])). 대괄호를 사용하지 않으면 문자열을 개별 문자 세트로 변환하므로 set ([ 'xyz']) 대신에 집합 ([ 'y', 'x', 'z'])을 얻습니다.) – Fizi