鱼C论坛

 找回密码
 立即注册
查看: 1803|回复: 4

[已解决]投票制删除重复项并保留唯一项

[复制链接]
发表于 2020-10-9 12:39:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
表1:
teacher        student        math        English
A                  张三        优        优
B                  张三        优        良
C                  张三        良        良
A                  李四        优        优
B                  李四        良        优
由A、B、C三位老师其中两位或者三位给学生打分,最后输出学生的最终成绩。
得票最多的为该科目最终成绩,当“优”、“良”一样多时输出false。
例:张三math“优”获得两次,“良”获得一次,因此张三math最终成绩为“优”
      李四math“优”获得一次,“良”获得一次,因此李四math最终成绩为“false”

最终输出结果:
student          math   English
张三                     优        良
李四                FALSE        优

求大佬帮忙!!!
最佳答案
2020-10-9 13:18:35
本帖最后由 kylin121380 于 2020-10-9 13:20 编辑
import pandas as pd


df = pd.read_excel('1.xls')
df = df.groupby('student').sum()
del df['teacher']
for i in df.index:
    for j in df.columns:
        df.loc[i, j] = '优' if df.loc[i, j].count('优') > df.loc[i, j].count('良') else '良' if df.loc[i, j].count('优') < df.loc[i, j].count('良') else 'False'
df.to_excel('2.xls')

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-9 13:18:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 kylin121380 于 2020-10-9 13:20 编辑
import pandas as pd


df = pd.read_excel('1.xls')
df = df.groupby('student').sum()
del df['teacher']
for i in df.index:
    for j in df.columns:
        df.loc[i, j] = '优' if df.loc[i, j].count('优') > df.loc[i, j].count('良') else '良' if df.loc[i, j].count('优') < df.loc[i, j].count('良') else 'False'
df.to_excel('2.xls')

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-9 13:34:14 | 显示全部楼层
import pandas as pd

a = pd.DataFrame([['A', '张三', '优', '优'],
                  ['B', '张三', '优', '良'],
                  ['C', '张三', '良', '良'],
                  ['A', '李四', '优', '优'],
                  ['B', '李四', '良', '优']],
                 columns=['teacher', 'student', 'math', 'English'])
print(a)
result = pd.DataFrame(data=None, index=['张三', '李四'], columns=['math', 'English'])

for j in ['math', 'English']:
    b = pd.pivot_table(data=a, values=['teacher'], index=['student'], columns=[j], aggfunc='count')
    b.columns = ['优', '良']
    for i in b.index:
        if b.loc[i, '优'] > 1:
            result.loc[i, j] = '优'
        elif b.loc[i, '良'] > 1:
            result.loc[i, j] = '良'
        elif b.loc[i, '优'] == b.loc[i, '良']:
            result.loc[i, j] = 'FLASE'
print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-9 13:47:38 | 显示全部楼层

你好,我想请问一下,如果成绩不止“优”、“良”两种等级,可能有多个等级,如何在多个等级中寻找出现最多的并且输出最终成绩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-9 14:24:12 | 显示全部楼层
我才是小宝啊 发表于 2020-10-9 13:47
你好,我想请问一下,如果成绩不止“优”、“良”两种等级,可能有多个等级,如何在多个等级中寻找出现最 ...

用数据透视。某些sql带了这个功能(PIVOT)可以直接搞
话说楼上几个怎么知道你这个是xls的数据还是db的数据
没玩过pandas 应该也行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 09:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表