通过Pandas数据框循环以获得具有独特俱乐部的足球运动员的最高总得分

ibps3vxo  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(120)

我有一个足球运动员的数据框,上面有他们的 * 队名,位置 * 和 * 总得分 *,这些都是基于他们在比赛中的一系列因素。我想创建一个不同阵容的球队,总得分最高(4-3-3,442,但是俱乐部只能为球队中的一名球员出现,所以如果我从俱乐部X得到一名门将,那么我就不能从俱乐部X得到一名后卫。现在我可以创建一个4-3-3阵容的球队(4名后卫,3名中场,3名攻击手),但其中有重复的球队。(见截图)。此外,如果2名球员的总得分相等,那么上场时间应该会有所不同。有人有想法如何开始构建这个逻辑吗?

(我不确定这篇文章是否足够清晰,是否可以接受stackoverflow。如果不是,请告诉我如何改进或提供什么以使其可以接受)

所有的帮助是高度赞赏!

0yg35tkg

0yg35tkg1#

根据细节和我的理解,我有2个假设的不同方法来创建最好的分数队
球队需要有4后卫,3中场,3攻击手(4 - 3 -3)

    • 假设1创建团队**

新球队的所有球员必须来自不同的球队(没有2支球队可以是来自竞争对手的球队

    • 没有两个玩家可以来自同一个团队,因此需要至少10**个独特的团队
    • 假设2创建团队**

新队伍中不同角色的队员应该来自不同的队伍,但同一角色的队员可以来自同一队伍(这个假设是基于问题中提供的重复条件)

    • 没有两个玩家可以来自同一个团队担任不同的角色,但可以担任同一个角色..因此需要至少3**个独特的团队
  • 例如:* 在4名后卫中,可以有超过1名球员来自同一个球队**,但4名后卫和3**名中场球员中,不能有一名球员来自同一个球队,即后卫或中场球员可以拥有该球员,但不能两者都拥有
    • 解决方案**
  • 假设1 *

将10个队名存储在线性数组中
您可以创建3个2d数组和1个多维(3d)数组

  • 数组类型:* * 2d**数组(二维数组,用于存储球员姓名和他/她的球队姓名)
  • 阵列数量:* * 3**(1个后卫,1个中场,1个攻击手)
      • team_array**-存储有竞争力的球队名称及其球员、得分和上场时间 (例如:-team_array [10][11][5])
      • d_array**-存储防守者数据 (例如:-d_array [4][2])
      • m_array**-存储中场数据 (例如:-m_array [3][2])
      • a_array**-存储攻击者数据 (例如:-m_array [3][2])

现在使用for-loop(你可以使用任何循环但我最喜欢的是for-loop:))

  • 遍历team_array的每个索引
  • 并使用if决策控制语句检查该团队是否已经存在于最终团队中
  • 如果不存在,则检查团队成员中的角色,例如后卫
  • 如果是防守者,则检查防守者中的最高得分
  • 然后如果最高分小于当前玩家的最高分,则使当前玩家成为最高分玩家
  • 如果两者相同,则根据所播放的分钟数进行更改
  • 在所有循环结束时,将最佳球员的详细信息添加到d_array中,该数组存储在变量中
high_score=0

high_time=0

con=false

d_c=0

player_det=["xxx","xxx"]

for i in range(10):                       //loop for team

 for j in range(11):                    // loop for player

   for k in range(4):      // -----------> LINE 69

    if d_array[k][1] == team_array[i][j][4]  // if player from same team already exists 
      // pre assign d_array with garbage value with wont clash with the original data

       con=true 
       break
   if con != true:          // ------------> LINE 420
      for k in range(3):
         if m_array[k][1]  == team_array[i][j][4] || a_array[k][1]  == team_array[i][j][4] :
           con=true
           break

   if con != true:

     if team_array[i][j][5] == "defender":  // condition for only checking defenders

       if team_array[i][j][0] > high_score: // condition for high score player

          high_score=team_array[i][j][0]  

          high_time=team_array[i][j][1]

          player_det[0]=team_array[i][j][2]

          player_det[1]=team_array[i][j][3]

      elif team_array[i][j][0] == high_score: //condition if high score is equal for two players

         if high_time < team_array[i][j][1]

            high_time=team_array[i][j][1]

            player_det[0]=team_array[i][j][2]

            player_det[1]=team_array[i][j][3]

 d_array[d_c++][0]=player_det[0]
 d_array[d_c++][1]=player_det[1]
    • 对每个玩家角色执行此操作并进行相应更改**
  • 在为每个玩家角色都做了这些之后
  • 从每个数组(即d_array..等)中添加所需的部分(玩家名,团队名...等,取决于您的要求)到最终数组
  • 假设2 *
    • 这是相同的代码,但从上面的代码中删除了 * 第69行到第420行**
  • 上面的代码可能有一些语法和逻辑错误:)*
    • 希望这就是你要找的**
      请随意询问与解决方案相关的任何问题;)
    • PS:**运行时间短,所以你必须完成剩下的代码

相关问题