我想知道什麼是最好的和有效的方式來檢查是否滿足4條標準中的3條滿足熊貓過濾條件。最好的方法來過濾多個條件?
目標字:Stevenson
數據幀:
+-----------+
| Names |
+-----------+
| Smith |
| Stevens |
| Parker |
| Stevenson |
| Dickson |
| Greene |
+-----------+
我需要過濾該DF以包括具有至少3個選自4 bigrams = ["st", "te", "ev", "on"]
字。我需要它包括文字Stevens
和Stevenson
。然後我計算我的目標詞和過濾詞之間的相似度。
我現在要做的是創建3個4的所有組合[(st, te, ev), (st, ev, on), ....]
,並使用df.Names.str.contains("st") & df.Names.str.contains("ev")
等篩選我的數據幀。然後我只留下唯一的行。
我覺得這並不是最有效的方法,因爲我在過濾上浪費大部分時間,而不是模糊匹配(正如我所預料的那樣)。我正在測試大小爲100k的df,但我真正的df超過了1M行。任何想法如何做得更好?二元搜索不適用於我的真實示例。
它看起來像布爾索引是你在找什麼。它會更有效率。 (http://pandas-docs.github.io/pandas-docs-travis/#boolean-indexing) – brotherperes
我不確定它是否更有效但可以測試'df [sum([df ['Names'] .str.contains(pat)for pat in bigrams])> = 3]'? – ayhan
我認爲阿揚提出了一個很好的解決方案。我想補充的唯一想法是apply + in的組合可以比pandas str.contains更快(在我用大約1m行的情況下,速度是兩倍) –