我对熊猫中最大的熊猫有问题。我似乎弄不明白为什么每个名称的列都不能正确排序。即使第二列或第三列的分数较高,only似乎只在第一列起作用。我试着根据谁有最高的两个分数来找出获胜者。在下面的例子中,Jeff应该是赢家,但wins只适用于第一列,所以dan总是赢的。任何帮助都将不胜感激。
示例代码:
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)输出:
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所需输出:
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发布于 2020-06-14 17:50:05
问题是,具有列列表(对于参数columns)的df.nlargest将首先根据列表中的第一个值(dan)进行排序,然后按第二个值(jeff)排序,最后是eric。
在nlargest文档页面的末尾对此进行了说明
要获得每列的最高两个值,请尝试使用以下方法:
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)输出:
dan jeff eric
0 10.0 10.0 9.5
1 9.5 9.9 6.3发布于 2020-06-15 04:06:24
下面是我是如何修改代码的。
更改为:
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)以下哪项输出:
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注意到底哪里出了问题。
https://stackoverflow.com/questions/62370574
复制相似问题