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

如何使用pandas基于另一列的值筛选两个分组的共有单词?

实现方案

核心逻辑为筛选出同时存在于list1和list2两个分组下的单词,再去重保留目标字段即可,以下是两种常用实现方式:


方法1:分组统计筛选法(代码更简洁,推荐)

import pandas as pd

# 构造示例DataFrame,你实际使用时替换为自己的df即可
df = pd.DataFrame({
    'source': ['list1', 'list1', 'list1', 'list2', 'list2', 'list2', 'list2'],
    'words': ['apple', 'pear', 'banana', 'ford', 'chevy', 'apple', 'banana'],
    'letter_count': [5,4,6,4,5,5,6]
})

# 处理逻辑:按单词分组,保留同时出现在2个source分组的单词,再去重得到结果
result = df.groupby('words').filter(lambda x: x['source'].nunique() == 2)[['words', 'letter_count']].drop_duplicates().reset_index(drop=True)
print(result)

逻辑说明:对单词分组后,统计每个单词对应的source唯一值数量,数量等于2说明该单词同时出现在两个分组中,筛选后保留目标字段并去重即可。


方法2:集合交集筛选法(逻辑更直观)

# 分别提取两个分组的单词集合,求交集得到共同单词
list1_words = set(df[df['source'] == 'list1']['words'])
list2_words = set(df[df['source'] == 'list2']['words'])
common_words = list1_words & list2_words

# 筛选原表中属于共同单词的条目,去重得到结果
result = df[df['words'].isin(common_words)][['words', 'letter_count']].drop_duplicates().reset_index(drop=True)
print(result)

两种方法的输出均符合预期:

words  letter_count
0   apple             5
1  banana             6

补充说明:如果确认原数据中同一个单词的letter_count值全局唯一,可以省略drop_duplicates()步骤


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:07