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

如何使用pandas从DataFrame中查找重复值并统计学生出现次数与所属班级

实现代码

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'biology': ['ryan', 'sarah', 'tom', 'ed', 'jackson'],
    'statistics': ['sarah', 'ed', 'jacob', 'ryan', 'de'],
    'ecology': ['austin', 'ryan', 'tom', 'sam', 'sarah']
})

# 1. 宽表转长表,得到「班级-学生」一对一对应关系
df_long = df.melt(var_name='班级', value_name='学生姓名')
# 可选:如果存在空姓名可加这行过滤:df_long = df_long.dropna(subset=['学生姓名'])

# 2. 按学生姓名分组,统计出现次数、收集所属班级
result = df_long.groupby('学生姓名').agg(
    出现次数=('班级', 'count'),
    所属班级=('班级', tuple)
).reset_index()

# 3. 按出现次数降序排序,次数相同按姓名升序,和示例输出顺序一致
result = result.sort_values(by=['出现次数', '学生姓名'], ascending=[False, True])

# 4. 按要求格式输出
for _, row in result.iterrows():
    class_str = "class" if row['出现次数'] == 1 else "classes"
    classes = ', '.join(row['所属班级'])
    print(f"{row['学生姓名']}, {row['出现次数']} {class_str}, ({classes})")

步骤说明

  • melt函数用来转换表结构:原表每列对应一个班级,转换后每一行存储单个学生和所属班级的对应关系,方便后续分组统计
  • groupby按学生姓名聚合:用count计算学生出现的次数(即所属班级数量),用tuple把学生对应的所有班级名称收集为元组
  • 排序规则优先按出现次数从高到低,次数相同的按姓名字母顺序升序,和示例输出顺序完全匹配
  • 输出时自动判断单复数,次数为1时用class,大于1时用classes,符合要求的输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:15:02