由 Bruno0 解決。答案如下,評論中有其他修復(fù)。我留下了問題的描述,但將更正后的代碼放在代碼塊中以供參考。我有一個用 NFL 球員的夢幻得分刮過的框架。nfl_frame該表按以下順序排序:- 周按升序排列- 位置按此順序 QB->RB->WR->TE->K-> 防守- 得分按降序排列它看起來像這樣,但有更多的球員和行:周名稱 Fanduel_Points1 威爾遜、拉塞爾 31.781 羅杰斯、亞倫 30.761 艾倫、喬什 28.181 杰克遜、拉馬爾 27.501 穆雷、凱勒 27.301 卡馬拉、阿爾文 31.001 埃利奧特、澤克 30.002 費城 1.002 杰克遜維爾 0.002 辛辛那提 -2.002 底特律 -3.002 達拉斯 -3.00我想做的是添加一個包含玩家位置的列。由于周和點排序是一致的,我想我可以編寫一個列表理解來檢查得分是否高于前一行,并沿著位置列表迭代以在發(fā)生這種情況時添加標簽。然后,當一行的周數(shù)高于前一行時,我們將重置索引以再次從 QB 開始。代碼如下所示:##writing comprehension to perform task listed above#creating empty list that I will add each position toResult = ['QB']#list of positionsPositions = list(['QB','RB','WR','TE','Def'])def add_position(df): #creating list of my positions #setting index as 0 to start with QB Role = 0 #loop checking for week number and points scored for i in range(1,len(df)): #if week for new row matches week for last row, and points for new row <= last row, then same position as last row if df.Week[i]== df.Week[i-1] and df.Fanduel_Points[i]<= df.Fanduel_Points[i-1]: Result.append(Positions[Role]) #if week for new row matches week for last row, and points for new row > last row, then next position in list elif df.Week[i] == df.Week[i-1] and df.Fanduel_Points[i] > df.Fanduel_Points[i-1]: Role +=1 Result.append(Positions[Role]) #if new week, reset and begin from Positions[0] to begin labeling as QB again elif df.Week[i] > df.Week[i-1] : Role = 0 Result.append(Positions[Role])#running my comprehension on the frameadd_position(nfl_frame)#apply add_position to my position columnnfl_frame['Position'] = Result
1 回答

Cats萌萌
TA貢獻1805條經(jīng)驗 獲得超9個贊
Role 用作 List Position 的索引,但不受限制。
因此,如果在給定的一周內(nèi),您有超過 6 行且 Fanduel_Price 始終增加的行,如本行所示
elif df.Week[i] == df.Week[i-1] and df.Fanduel_Price[i] > df.Fanduel_Price[i-1]:
然后 Role 的值達到 6,您會得到該索引超出范圍的錯誤。
您可以按如下方式限制 Role 的增加
Role=min(Role+1, len(Positions)-1)
添加回答
舉報
0/150
提交
取消