如何使用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
相关产品推荐
相关产品推荐

