我有这个练习数据集
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是数学方面的尖子生,但他们也是另一门学科的尖子生,他们就不会被选中。
我知道如何让每门课的学生名列前茅,但我不知道如何让一门课的学生名列前茅。
发布于 2021-10-17 04:14:37
我不知道我是不是全懂了。
您可以按列math排序并获得前3行,并获得索引以获得math的前3名学生。
x.sort_values('math', ascending=False)[:3].index您可以对所有列重复此操作,并将名称保留在列表中
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)来获取他/她排名第一的次数。
for name in x.index:
print(name, results.count(name))你需要有价值的人,这样你才能使用if
for name in x.index:
count = results.count(name)
if count == 1:
print(name, ':', count)这给出了只在一个科目中名列前茅的人。
如果您需要位于math顶部的人员,则可以使用以下命令检查这些人员
x.sort_values('math', ascending=False)[:3].indeximport 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())https://stackoverflow.com/questions/69600748
复制相似问题