我对python比较陌生,迫切需要一些帮助。
我有一个数据帧(称为"waves"),其中包含决斗的详细比赛列表,其中两个人执行得分操作。每个动作的得分在0-10之间。数据帧按决斗中剩余的时间排序。
数据集"waves"示例:
Person Movement Score Timeleft
0 BH99 WBP16 4.73 25:43.0
1 JD21 WBP17 5.33 25:01.0
2 BH99 WBP18 5.23 23:20.0
3 BH99 WBP19 4.83 19:48.0
4 JD21 WBP20 4.83 18:26.0
5 BH99 WBP21 5.27 16:15.0
6 BH99 WBP22 1.60 12:45.0
7 JD21 WBP23 3.10 07:42.0
8 JD21 WBP24 5.07 06:36.0
9 BH99 WBP25 6.33 06:25.0
10 JD21 WBP26 0.27 03:34.0
11 BH99 WBP27 4.40 02:43.0
12 JD21 WBP28 4.57 02:29.0
从这个数据框中,我现在想创建两个列,记录(按元素的方式)当前的两个高分。
我为这个
编写了以下代码#setting initial starting value for max1 and max2 to zero and creating column in datafram "waves"
max1 = 0
max2 = 0
waves["max1"]=max1
waves["max2"]=max2
#for loop to calulate highscores elementwise
for high in waves["Score"]:
if high > max1 :
max2 = max1
max1 = high
waves["max1"]=max1
waves["max2"]=max2
print(max1, max2)
elif max2 < high <= max1:
max1 = max1
max2 = high
print(max1, max2)
waves["max1"]=max1
waves["max2"]=max2
else:
max1 = max1
max2 = max2
print(max1, max2)
waves["max1"]=max1
waves["max2"]=max2
print(waves)
现在的问题是,打印调用print(max1, max2)
返回的正是我想要的,不知怎么的,新列"max1"one_answers";max2"然而,在我的wave数据帧中,每行只包含最终的(而不是元素方面的)两个高分。
for循环中print(max1, max2)的输出:
4.73 0
5.33 4.73
5.33 5.23
5.33 5.23
5.33 5.23
5.33 5.27
5.33 5.27
5.33 5.27
5.33 5.27
6.33 5.33
6.33 5.33
6.33 5.33
6.33 5.33
包含新列max1 &的更新数据帧波输出max2:
Person Movement Score Timeleft max1 max2
0 BH99 WBP16 4.73 25:43.0 6.33 5.33
1 JD21 WBP17 5.33 25:01.0 6.33 5.33
2 BH99 WBP18 5.23 23:20.0 6.33 5.33
3 BH99 WBP19 4.83 19:48.0 6.33 5.33
4 JD21 WBP20 4.83 18:26.0 6.33 5.33
5 BH99 WBP21 5.27 16:15.0 6.33 5.33
6 BH99 WBP22 1.60 12:45.0 6.33 5.33
7 JD21 WBP23 3.10 07:42.0 6.33 5.33
8 JD21 WBP24 5.07 06:36.0 6.33 5.33
9 BH99 WBP25 6.33 06:25.0 6.33 5.33
10 JD21 WBP26 0.27 03:34.0 6.33 5.33
11 BH99 WBP27 4.40 02:43.0 6.33 5.33
12 JD21 WBP28 4.57 02:29.0 6.33 5.33
我在这里错过了什么?在另一个线程中,我读到它可以连接到我的缩进,但到目前为止还没有成功地调整它…
任何帮助都是感激的。谢谢你,祝你愉快。-)
用列表跟踪它们。添加新值,排序列表,删除最低的值。将新列保留在列表中,然后将它们添加到循环后的df中。
max1col = []
max2col = []
maxes = [0,0]
#for loop to calulate highscores elementwise
for high in waves["Score"]:
maxes.append(high)
maxes = sorted(maxes)[-2:]
max1col.append(maxes[0])
max2col.append(maxes[1])
waves["max1"]=max1col
waves["max2"]=max2col
print(waves)