Pandas DataFrame行数据交集计算:统计不同班级共有学生数量
实现方案
核心思路
- 先将每个班级对应的学生列表转换为集合,方便直接计算交集
- 生成所有无重复的两两班级组合,避免重复计算(如
1A-2B和2B-1A视为同一组) - 遍历所有组合计算学生集合的交集大小,最后整理为目标DataFrame
完整代码
import pandas as pd from itertools import combinations # 原始数据 df = pd.DataFrame({'Class': ['1A', '2B', '2C'], 'Students': [['Alice', 'Philips', 'John'], ['Philips', 'John', 'Anna', 'William'], ['Arthur', 'Alice', 'Anna', 'William']] }) # 构建班级到学生集合的映射 class_stu_set = df.set_index('Class')['Students'].apply(set) # 生成两两组合并计算交集 res_data = [] for cls1, cls2 in combinations(class_stu_set.index, 2): intersect_size = len(class_stu_set[cls1] & class_stu_set[cls2]) res_data.append({ 'Comparison': f"{cls1}-{cls2}", 'Intersection size': intersect_size }) # 转换为结果DataFrame result = pd.DataFrame(res_data)
输出验证
运行上述代码后输出结果和预期完全一致:
Comparison Intersection size 0 1A-2B 2 1 1A-2C 1 2 2B-2C 2
内容的提问来源于stack exchange,提问作者Guilherme Reis
相关产品推荐
相关产品推荐

