2017-09-09 5 views
1

以下のコードでは、一致するカテゴリに適用される条件が「レクリエーション」、「レクリエーションで結合されている場合:」です。賢明なように、私は異なるカテゴリのコール関数

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) 

など、カテゴリ一覧を「レクリエーション」、「セキュリティ」、「ヘルスケア」を含むカテゴリのリストを持っている:私はで同じ関数を呼び出すにはどうすればよい

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'] 

ここで引数としてカテゴリ名を渡しますか? 私はカテゴリ名渡してみました:が、それは例外TypeErrorを投げています: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()があります。ここで

from functools import partial 

def match_bigrams(RC, row): 
    ... 

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

Recreationmatch_bigramsの最初の引数として使用され、partialは再び(その引数apply()によって供給される)一引数の関数を返します。これは、事前に与えられた引数が最初に来たときに最適に動作します。

関連する問題