首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用find查找比赛的获胜者

使用find查找比赛的获胜者
EN

Stack Overflow用户
提问于 2020-06-14 17:16:57
回答 2查看 55关注 0票数 1

我对熊猫中最大的熊猫有问题。我似乎弄不明白为什么每个名称的列都不能正确排序。即使第二列或第三列的分数较高,only似乎只在第一列起作用。我试着根据谁有最高的两个分数来找出获胜者。在下面的例子中,Jeff应该是赢家,但wins只适用于第一列,所以dan总是赢的。任何帮助都将不胜感激。

示例代码:

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

names = []
con = int(input("Number of Contestants: "))
maxSurfers = con #number of surfers
while len(names) < maxSurfers:
        name = input(" Enter your Name: ")
        names.append(name)
        print("Contestants")
        print(names)
else:
       print("Thank You for Participating!\n")
       print("Sign up is now closed\n")

score = {}
for name in names:
    numWaves = int(input("Number of Waves for "+name+": "))
    newScores = []
    for i in range(numWaves):
        newScores.append(float(input("Enter score wave: ")))
    score[name] = newScores
#newScores - most recent entry committed to score directory

df = pd.DataFrame(score)
for (columnName, columnData) in df.iteritems():
    winner = df.nlargest(2, names)
print(winner)

输出:

代码语言:javascript
复制
Number of Contestants: 3
 Enter your Name: dan
Contestants
['dan']
 Enter your Name: jeff
Contestants
['dan', 'jeff']
 Enter your Name: eric
Contestants
['dan', 'jeff', 'eric']
Thank You for Participating!

Sign up is now closed

Number of Waves for dan: 5
Enter score wave: 3.0
Enter score wave: 10.0
Enter score wave: 5.6
Enter score wave: 9.5
Enter score wave: 3.0
Number of Waves for jeff: 5
Enter score wave: 10.0
Enter score wave: 3.0
Enter score wave: 3.0
Enter score wave: 9.9
Enter score wave: 3.0
Number of Waves for eric: 5
Enter score wave: 3.0
Enter score wave: 1.0
Enter score wave: 5.6
Enter score wave: 9.5
Enter score wave: 6.3
    dan  jeff  eric
1  10.0   3.0   1.0
3   9.5   9.9   9.5

所需输出:

代码语言:javascript
复制
Number of Contestants: 3
 Enter your Name: dan
Contestants
['dan']
 Enter your Name: jeff
Contestants
['dan', 'jeff']
 Enter your Name: eric
Contestants
['dan', 'jeff', 'eric']
Thank You for Participating!

Sign up is now closed

Number of Waves for dan: 5
Enter score wave: 3.0
Enter score wave: 10.0
Enter score wave: 5.6
Enter score wave: 9.5
Enter score wave: 3.0
Number of Waves for jeff: 5
Enter score wave: 10.0
Enter score wave: 3.0
Enter score wave: 3.0
Enter score wave: 9.9
Enter score wave: 3.0
Number of Waves for eric: 5
Enter score wave: 3.0
Enter score wave: 1.0
Enter score wave: 5.6
Enter score wave: 9.5
Enter score wave: 6.3
    dan  jeff  eric
0   3.0  10.0   3.0
3   9.5   9.9   9.5
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-14 17:50:05

问题是,具有列列表(对于参数columns)的df.nlargest将首先根据列表中的第一个值(dan)进行排序,然后按第二个值(jeff)排序,最后是eric。

nlargest文档页面的末尾对此进行了说明

pandas.DataFrame.nlargest

要获得每列的最高两个值,请尝试使用以下方法:

代码语言:javascript
复制
df = pd.DataFrame(score)

winner_df = pd.DataFrame()
for (columnName, columnData) in df.iteritems():
    winner = df.nlargest(2, columnName)[columnName].reset_index(drop= True)
    winner_df[columnName] = winner

print(winner_df)

输出:

代码语言:javascript
复制
    dan     jeff    eric
0   10.0    10.0    9.5
1   9.5     9.9     6.3
票数 2
EN

Stack Overflow用户

发布于 2020-06-15 04:06:24

下面是我是如何修改代码的。

更改为:

代码语言:javascript
复制
df = pd.DataFrame(score)
winner_df = pd.DataFrame()
for (columnName, columnData) in df.iteritems():
    winner = df.nlargest(2, columnName)[columnName].reset_index(drop= True)
    winner_df[columnName] = winner
print(winner)

以下哪项输出:

代码语言:javascript
复制
Number of Waves for dan: 3
Enter score wave: 3.0
Enter score wave: 3.0
Enter score wave: 3.0
Number of Waves for jake: 3
Enter score wave: 10.0
Enter score wave: 9.9
Enter score wave: 3.0
Number of Waves for jeff: 3
Enter score wave: 4.0
Enter score wave: 3.0
Enter score wave: 5.0
0    5.0
1    4.0
Name: jeff, dtype: float64

注意到底哪里出了问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62370574

复制
相关文章

相似问题

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