Pandas如何筛选出现两次的姓名-科目组合并拼接对应成绩
Pandas 筛选重复姓名-科目组合并拼接去重成绩实现方案
核心代码
import pandas as pd # 构建原始数据集 df = pd.DataFrame( [ ("Alex", "Science", "A"), ("Bob", "Maths", "B"), ("Bob", "Maths", "C"), ("Cynthia", "Science", "C"), ("Dylan", "Geography", "A"), ("Dylan", "Geography", "A") ], columns=["Name", "Subject", "Grade"] ) # 分组处理 result = ( df.groupby(["Name", "Subject"], as_index=False) .agg( record_cnt=("Grade", "count"), # 统计每个组合的出现次数 Grade=("Grade", lambda col: ",".join(sorted(set(col)))) # 成绩去重后逗号拼接 ) .query("record_cnt == 2") # 筛选出现2次的组合 .drop(columns="record_cnt") # 删除临时统计的次数字段 ) print(result)
运行输出
Name Subject Grade 0 Bob Maths B,C 1 Dylan Geography A
逻辑说明
- 用
groupby指定Name、Subject两个字段作为分组键,即可按「姓名+科目」的维度做聚合计算 - 聚合成绩时先通过
set()对组内成绩去重,避免重复值被多次拼接,加sorted()是为了保证成绩输出顺序稳定,不会因为集合的无序性出现"C,B"这类不符合预期的顺序 - 聚合时同步统计每个分组的记录条数,筛选出条数等于2的分组后,删掉临时用的统计字段即可得到目标结果
内容的提问来源于stack exchange,提问作者jibecat
相关产品推荐
相关产品推荐

