2017-09-09 13 views
1

아래 코드에서 일치하는 범주에 적용되는 조건은 '레크리에이션'입니다. - 은 레크리에이션에 합류하는 경우 :입니다. 내가하여 동일한 함수를 호출하려면 어떻게다른 범주의 호출 함수

category = [('Luxury Apartments', 'IN', 'Recreation_Ammenities'), 
     ('CCTV', 'IN','Security'), 
     ('Yoga', 'IN', 'HealthCare'), 
     ('Jogging Tracks', 'IN', 'Recreation_Ammenities')] 
Recreation = [e1 for (e1, rel, e2) in category if e2=='Recreation_Ammenities'] 
Security= [e1 for (e1, rel, e2) in category if e2=='Security'] 
HealthCare= [e1 for (e1, rel, e2) in category if e2=='HealthCare'] 

: 현명한처럼, 나는 '레크리에이션', '보안', '헬스 케어'를 포함하는 범주 목록 등

def match_bigrams(row,RC): 
    categories = [] 

    for bigram in row.bigram: 
     joined = ' '.join(list(bigram)) 
     if joined in RC: 
      categories.append(joined) 

    return categories 

df['Recreation_Amenities'] = df.apply(match_bigrams(Recreation), axis=1) 

분류 목록은이 여기서 범주 이름을 인수로 전달 하시겠습니까? RC에 가입하면 을 :하지만이 형식 오류 던지고 : 나는 카테고리 이름을 전달하려

TypeError: match_bigrams(Recreation) missing 1 required positional argument:RC

+0

** 질문 **을 편집하고보고있는'TypeError'를 얻기 위해 ** match_bigrams()에 "카테고리 이름을 전달하려고 시도한 방법"을 정확하게 표시하십시오. – alexis

+0

질문을 편집했습니다. pls가 업데이트 된 것을 찾았습니다. –

답변

2

당신은 함수에 하나 개의 인수를 전달, 새로운 (임시) 기능을 끝낼 수있는 방법이 필요를 그 또 하나의 논쟁이 필요합니다. 여기에 그것을 할 수있는 간단한 방법이있다 :

df['Recreation_Amenities'] = df.apply(lambda r: match_bigrams(r, Recreation), axis=1) 

apply() 방법은 인수 r 각 행을 공급한다.

함수 프로그래밍에서는 이것을 "부분 적용"이라고하며 동일한 용도로 사용할 수있는 funtools.partial() 함수가 있습니다. 사전 제공된 인수가 먼저 때 가장 잘 작동합니다

여기 Recreation
from functools import partial 

def match_bigrams(RC, row): 
    ... 

df['Recreation_Amenities'] = df.apply(partial(match_bigrams, Recreation), axis=1) 

match_bigrams의 첫 번째 인수로 사용되며, partial 다시 (그 인수 apply()에 의해 제공됩니다) 한 인수 함수를 반환합니다 .