在多种条件下过滤的最佳方法?

时间:2017-07-11 08:46:56

标签: python python-3.x pandas

我想知道在大熊猫过滤时,检查4个标准中的3个是否是最好和最有效的方法。

目标词:Stevenson

数据帧:

+-----------+
|   Names   |
+-----------+
| Smith     |
| Stevens   |
| Parker    |
| Stevenson |
| Dickson   |
| Greene    |
+-----------+

我需要过滤此df以包含至少有4个bigrams = ["st", "te", "ev", "on"]中的3个字。我需要它包含单词StevensStevenson。然后我计算我的目标词和过滤词之间的相似性度量。

我现在所做的是创建4个[(st, te, ev), (st, ev, on), ....]中的3个的所有组合,并使用df.Names.str.contains("st") & df.Names.str.contains("ev")等过滤我的数据框。然后我只留下唯一的行。

我觉得这不是最有效的方式,因为我浪费大部分时间在过滤而不是模糊匹配(正如我所料)。我正在测试大小为100k的df,但我的真实df超过1M行。知道怎么做得更好吗?二进制搜索不适用于我的真实示例。

2 个答案:

答案 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.applydatatype

,请使用str
df[df['Names'].apply(lambda x : ('st' in x) & ('ev' in x))]