多条件过滤的最佳方法?

2024-06-10 20:38:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道什么是最好和有效的方法来检查,如果3/4的标准,而过滤熊猫。在

目标词:Stevenson

数据帧:

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

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

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

我觉得这不是最有效的方法,因为我把大部分时间浪费在过滤上,而不是在模糊匹配上(正如我预期的那样)。我正在测试大小为100k的df,但我的实际df超过1M行。你知道怎么做得更好吗?在我的实际例子中,二进制搜索不起作用。在


Tags: 数据方法目标df标准nameson单词
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

如果名称datatypestr,则使用pandas.Series.apply

df[df['Names'].apply(lambda x : ('st' in x) & ('ev' in x))]

相关问题 更多 >