2016-07-26 12 views
2

反復効率的に私はこのようになりますリスト持って

lst = ['a','b','c'] 

とこのようになりますデータフレームを:私は、データフレームに新しい列を作成するために探しています

id col1 
1 ['a','c'] 
2 ['b'] 
3 ['b', 'a'] 

それは、COL1

id col1   intersect 
1 ['a','c'] 2 
2 ['b']  1 
3 ['d', 'a'] 1 

からLSTの交差点や個々のリストの長さは、現在、私のコードは次のようになりましたこの:

df['intersection'] = np.nan 
for i, r in df.iterrows(): 
    ## If-Statement to deal with Nans in col1 
    if r['col1'] == r['col1']: 
     df['intersection'][i] = len(set(r['col1']).intersection(set(lst))) 

問題は、このコードは、非常に時間のかかる200K行の私のデータセットにし、200個の要素のリストと交差するということです。より効率的にこれを行う方法はありますか?

ありがとうございます!

+0

のですか?私には常に真実のように見えますか? – Psidom

+0

でnansを確認してください。 x == xは、xがnanの場合にfalseを返します。 – eljusticiero67

答えて

3

これを試しましたか?

lstset = set(lst) 
df['intersection'] = df['col1'].apply(lambda x: len(set(x).intersection(lstset))) 

もう一つの可能​​性あなたはif文を必要としないのはなぜ

df['intersection'] = df['col1'].apply(lambda x: len([1 for item in x if item in lst])) 
+0

ugh!そんなダミー!!!!!! – eljusticiero67

関連する問題