如何高效过滤Pandas大DataFrame中含重复词的Trigram?
高效过滤Pandas DataFrame中含重复词的Trigram
问题背景
你有百万级规模的Pandas DataFrame,其中某列存储着Trigram字符串列表,需要过滤掉列表中存在重复词的Trigram,仅保留三个词完全唯一的项。
示例数据
import pandas as pd df = pd.DataFrame({ 'val': [1, 2], 'Trigrams': [ ['status opportunity reference', 'reject remove reject', 'situation situation hon', 'Good Sure Cable'], ['don bradman sir', 'manners maketh man', 'gold chain chain'] ] })
高效解决方案
方法1:优化后的apply(列表推导式)
用列表推导式替代原有的显式for循环,列表推导式是Python中经C优化的语法,执行效率远高于手动循环+append:
df['Filtered_Trigrams'] = df['Trigrams'].apply( lambda x: [trigram for trigram in x if len(set(trigram.split())) == 3] )
判断逻辑:将单个Trigram按空格拆分后转成集合,若集合长度为3,说明三个词完全唯一。
方法2:向量化explode+groupby(适配百万级数据)
将列表展开为单行记录,利用Pandas内置的向量化操作过滤,再聚合回原结构,完全规避Python层面的逐行循环,效率提升显著:
# 展开每个Trigram到独立行 exploded_df = df.explode('Trigrams') # 标记有效Trigram(三个词唯一) exploded_df['is_valid'] = exploded_df['Trigrams'].apply(lambda t: len(set(t.split())) == 3) # 过滤有效项并按原分组聚合回列表 filtered_groups = exploded_df[exploded_df['is_valid']].groupby('val')['Trigrams'].agg(list).reset_index() # 合并回原DataFrame df = df.merge(filtered_groups, on='val', suffixes=('', '_filtered'))
效果验证
处理后df的目标列结果如下:
| val | Filtered_Trigrams |
|---|---|
| 1 | ['status opportunity reference', 'Good Sure Cable'] |
| 2 | ['don bradman sir', 'manners maketh man'] |
内容的提问来源于stack exchange,提问作者Shubham R
相关产品推荐
相关产品推荐

