我想知道在大熊猫过滤时,检查4个标准中的3个是否是最好和最有效的方法。
目标词:Stevenson
数据帧:
+-----------+
| Names |
+-----------+
| Smith |
| Stevens |
| Parker |
| Stevenson |
| Dickson |
| Greene |
+-----------+
我需要过滤此df以包含至少有4个bigrams = ["st", "te", "ev", "on"]
中的3个字。我需要它包含单词Stevens
和Stevenson
。然后我计算我的目标词和过滤词之间的相似性度量。
我现在所做的是创建4个[(st, te, ev), (st, ev, on), ....]
中的3个的所有组合,并使用df.Names.str.contains("st") & df.Names.str.contains("ev")
等过滤我的数据框。然后我只留下唯一的行。
我觉得这不是最有效的方式,因为我浪费大部分时间在过滤而不是模糊匹配(正如我所料)。我正在测试大小为100k的df,但我的真实df超过1M行。知道怎么做得更好吗?二进制搜索不适用于我的真实示例。
答案 0 :(得分:2)
这应该有效。 (经过一些编辑后)
bigrams = ["st", "te", "ev", "on"]
df['count'] = df.Names.apply(lambda x: sum([1 for v in bigrams if v in x]))
df[df['count'] >= 3].Names
答案 1 :(得分:1)
如果名称的pandas.Series.apply
为datatype
str
df[df['Names'].apply(lambda x : ('st' in x) & ('ev' in x))]