根据两个条件更改行值的步骤

2024-06-08 04:30:25 发布

您现在位置:Python中文网/ 问答频道 /正文

由布鲁诺解决。答案如下,在评论中有附加的修正。我留下了问题的描述,但将更正后的代码放在代码块中以供参考。

我有一个框架nfl_frame我用NFL球员的幻想分数勉强拼凑了一下。该表按以下顺序排序:

-按升序排列的周数
-此订单中的位置QB->;RB->;WR->;TE->;K->;防御
-按降序排列的点

看起来是这样的,但是有更多的玩家和行:

周名Fanduel_积分
1威尔逊,罗素31.78
1罗杰斯,亚伦30.76
1艾伦,乔什28.18
1杰克逊,拉马尔27.50
1默里,凯勒27.30
1卡马拉,阿尔文31.00
1埃利奥特,泽克30.00
2费城1.00
2杰克逊维尔0.00
2辛辛那提-2.00
2底特律-3.00
2达拉斯-3.00

我想做的是添加一列球员的位置。由于周和分数排序是一致的,我想我可以写一个列表,检查得分是否高于前一行,并在出现这种情况时沿着位置列表迭代添加标签。然后,当一行的周数高于前一行时,我们将重新设置索引,以从QB开始。代码如下所示:

##writing comprehension to perform task listed above
#creating empty list that I will add each position to
Result = ['QB']
#list of positions
Positions = 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 frame
add_position(nfl_frame)
#apply add_position to my position column
nfl_frame['Position'] = Result


Tags: andtogtdfforpositionresultlist
1条回答
网友
1楼 · 发布于 2024-06-08 04:30:25

角色用作列表位置的索引,但没有限制

因此,如果在给定的一周内,您有6行以上的价格始终在上涨,如这一行所示

elif df.Week[i] == df.Week[i-1] and df.Fanduel_Price[i] > df.Fanduel_Price[i-1]:

然后,如果角色的值达到6,则会得到此索引超出范围的错误

您可以按如下方式限制角色的增加

Role=min(Role+1, len(Positions)-1)

相关问题 更多 >

    热门问题