首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标识列中的唯一索引

标识列中的唯一索引
EN

Stack Overflow用户
提问于 2021-10-17 01:40:30
回答 1查看 19关注 0票数 0

我有这个练习数据集

代码语言:javascript
复制
table = {'name': ['Harris',
                  'Jericho','Keenan','Korbyn','Wes','Eliezer',
                  'Jeffery','Kalel','Kylian','Turner','Willie','Rogelio','Ephraim'],
        'math': random.sample(range(0, 100), 13),
        'english':random.sample(range(0, 100), 13),
        'science':random.sample(range(0, 100), 13),
        'geo':random.sample(range(0, 100), 13),
        'chemistry':random.sample(range(0, 100), 13),
        'physics':random.sample(range(0, 100), 13)}

x = pd.DataFrame(table)
x.set_index('name')

我想为每个科目找出班上排名前3位的学生,他们不是其他科目中成绩最好的学生。

例如,如果Harris和Jericho是数学方面的尖子生,但他们也是另一门学科的尖子生,他们就不会被选中。

我知道如何让每门课的学生名列前茅,但我不知道如何让一门课的学生名列前茅。

EN

回答 1

Stack Overflow用户

发布于 2021-10-17 04:14:37

我不知道我是不是全懂了。

您可以按列math排序并获得前3行,并获得索引以获得math的前3名学生。

代码语言:javascript
复制
x.sort_values('math', ascending=False)[:3].index

您可以对所有列重复此操作,并将名称保留在列表中

代码语言:javascript
复制
results = []

for column_name in x.columns:
    names = x.sort_values(column_name, ascending=False)[:3].index.tolist()
    results += names
    print(column_name, ':', names)

现在,您可以使用标准的.count(studen_name)来获取他/她排名第一的次数。

代码语言:javascript
复制
for name in x.index:
    print(name, results.count(name))

你需要有价值的人,这样你才能使用if

代码语言:javascript
复制
for name in x.index:
    count = results.count(name)
    if count == 1:
        print(name, ':', count)

这给出了只在一个科目中名列前茅的人。

如果您需要位于math顶部的人员,则可以使用以下命令检查这些人员

代码语言:javascript
复制
x.sort_values('math', ascending=False)[:3].index

代码语言:javascript
复制
import random
import pandas as pd

random.seed(0)  #  to have always the same random values

table = {'name': ['Harris',
                  'Jericho','Keenan','Korbyn','Wes','Eliezer',
                  'Jeffery','Kalel','Kylian','Turner','Willie','Rogelio','Ephraim'],
        'math': random.sample(range(0, 100), 13),
        'english':random.sample(range(0, 100), 13),
        'science':random.sample(range(0, 100), 13),
        'geo':random.sample(range(0, 100), 13),
        'chemistry':random.sample(range(0, 100), 13),
        'physics':random.sample(range(0, 100), 13)}

x = pd.DataFrame(table)
x.set_index('name', inplace=True)
print(x)

results = []

for column_name in x.columns:
    names = x.sort_values(column_name, ascending=False)[:3].index.tolist()
    results += names
    print(column_name, ':', names)

print(results)

for name in x.index:
    count = results.count(name)
    if count == 1:
        print(name, results.count(name))
        print('math:', name in x.sort_values('math', ascending=False)[:3].index.tolist())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69600748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档