You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效过滤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的目标列结果如下:

valFiltered_Trigrams
1['status opportunity reference', 'Good Sure Cable']
2['don bradman sir', 'manners maketh man']

内容的提问来源于stack exchange,提问作者Shubham R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:39:19