np.随机随时间推移的选择加权辍学率?

2024-09-29 21:33:07 发布

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

我有一个df,我想显示每年随机加入一个运动队的人数,其中排名的倒数用作标准化权重。该代码每年有10个人分配给一个团队。我有这方面的代码,工作得很好。我的问题是,当团队成员达到分配的最大数量时,我如何在一段时间内放弃团队和他们的权重,而不将他们从df中删除?我知道这需要每年重新调整权重和选择,但我不知道如何实现。你知道吗

  • 编辑以添加dict

    df_dict = {'Rank1': {0: 1, 1: 2, 2: 3, 3: 3},
               'Team': {0: 'Foo', 1: 'Bar', 2: 'Baz', 3: 'Cat'},
               'current_num': {0: 6, 1: 5, 2: 9, 3: 10},
               'max_num': {0: 15, 1: 16, 2: 14, 3: 18}}
    
    
      df_input
    
     Rank1 Team  max_num   current_num  
       1    Foo    15          6       
       2    Bar    16          5       
       3    Baz    14          9        
       3    Cat    18          10       
    

    数据框输出

     Rank1 Rank2  Team  max_num   current_num  Y1 Y2  Y3   Final_total
       1    3      Foo    15          6        4   5   4         19
       2    2      Bar    16          5        4   3   2         14
       3    1      Baz    14          9        1   2   2         14
       3    1      Cat    18          10       1   0   2         13
    

当前代码:

      def Team_picker(df):
            new_weight = {1:3,3:1}
            df['Rank2'] = df.Rank1.map(new_weight)
            All_Teams = df['Team'].tolist()
            weights = df['Rank2'].tolist()
            norm = [float(i)/sum(weights) for i in weights]

            for x in range(1,4):
                 year = 'Y %d'% x
                 T = [choice(All_Teams, p=norm) for _ in range(10)]
                 Player_counts = Counter(T)
                 df[year] = df['Team'].map(Player_counts)
            T_Years = [col for col in df.columns if col.startswith('Y')]
            df['Final_Total']= df['current_num'] + (df[T_Years].sum(axis=1))

            return df

然而,我瞄准的df看起来更像这样:

      df_output2

  Rank1 Rank2  Team  max_num   current_num  Y1 Y2  Y3   Final_total
   1    3      Foo    15          6         4   5   0         15
   2    2      Bar    16          5         4   3   4         16
   3    1      Baz    14          9         1   2   2         14
   3    1      Cat    18          10        1   0   4         15 

基本上我试着完成两件事1)阻止一支球队在抽签年被选中或分配一个人,如果他们达到了“最大数量”,那么在示例中,球队Foo在第2年达到了最大数量,所以在第3年,他们将被排除在抽签之外,所有东西都将被重新加权以适应。2.)我还需要阻止一个“团队”在这一年中被分配更多的人,如果他们在这一年的所有人都被分配之前达到了他们的“最大数量”。你知道吗


Tags: indffor数量foobarbazcurrent

热门问题