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

如何在Pandas groupby中筛选同时满足多个pos要求的lemma值

方案1:最简实现(适合中小数据量)

直接按lemma分组后判断每组的pos是否同时包含两种目标标签即可,一行代码就能完成:

target_lemmas = df.groupby('lemma').filter(lambda x: {'VERB', 'NOUN'}.issubset(x['pos']))['lemma'].unique().tolist()

运行后得到的结果就是['walk'],完全符合需求。

方案2:高性能实现(适合百万级以上大数据量)

避开apply的函数调用开销,全程用pandas原生向量化操作,性能提升非常明显:

# 1. 先过滤出只需要的pos类型,再去重相同lemma和pos的条目
tmp = df[df['pos'].isin(['VERB', 'NOUN'])].drop_duplicates(['lemma', 'pos'])
# 2. 统计每个lemma对应的不同pos数量,数量为2就说明同时具备两种标签
target_lemmas = tmp.groupby('lemma').size()[lambda x: x == 2].index.tolist()

原方案效率低的原因

之前的实现需要两次遍历groupby对象,还要额外做集合交集运算,迭代和集合操作的开销都会随数据量增长快速升高,上述两个方案都只需要一次分组操作,性能好很多。


内容的提问来源于stack exchange,提问作者Alexander Tono

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:15:00