2017-04-21 7 views
1

あるかどうかを確認するための効率的な方法の私の最初のデータフレームは、このパンダ:列Aの値がB列の値のリストに

A | B 
----------------- 
'a' | ['1', 'a', 'b']   
'1' | ['2', '5', '6'] 
'd' | ['a', 'b', 'd']   
'y' | ['x', '1', 'y'] 

のように見えると私は「」対応しているかどうかを確認したいですB内のリスト:

:[ '1'、 'A'、 'B']

は、私が使用して私に期待される結果を与えること

df.apply(lambda row: row[['A']][0] in row[['B']][0], axis=1)   

を適用することを行うことができます

[True, False, True, True] 

しかし、実際のデータには、非常に重くて年齢がかかります(何百万行もあります)。 同じことを行うより効率的な方法はありますか? たとえば、numpyの要素単位操作などを使用していますか?

答えて

4

あなたがセットに各列を変換する場合は、それ以外のペアごとのサブセット

a = d.A.apply(lambda x: set([x])) 
b = d.B.apply(set) 

a < b 

0  True 
1 False 
2  True 
3  True 
dtype: bool 

を比較する<を使用することができ、あなたはzip

[a in b for a, b in zip(d.A.values.tolist(), d.B.values.tolist())] 

[True, False, True, True] 

タイミングでリストの内包表記を使用することができます小データ

enter image description here

タイミング、大規模なデータ

enter image description here

+0

私はそれが絶対的に巨大な時間の節約になり、リストの内包の道を選びました。どうもありがとう! – dark

+0

なぜこれがずっと速いのか説明してください。ありがとう – dark

関連する問題