随着时间的推移np.random选择加权辍学?

时间:2018-02-22 17:40:25

标签: python pandas numpy random

我有一个df,我希望显示一年中随机添加到运动队的人数,其中等级的倒数被用作标准化权重。该代码每年有10个人分配给一个团队。我有这个代码,工作正常。我的问题是,一旦他们达到分配的团队成员的最大数量,我是如何随着时间的推移丢弃团队及其权重,而不是从df中删除它们?我知道这需要重新调整每年的重量和选择,但我不确定如何实现。

  • 编辑添加词典

    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       
    

    df_output

     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_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.)如果他们达到'max_num',那么在抽奖年度中阻止一个团队被选中或分配一个人,所以在示例中,Foo团队在第二年达到最大值所以在一年中3他们将被排除在平局之外,所有东西都会重新加权以适应。 2.)如果他们在所有人被分配到年度之前达到他们的'max_num',我还需要阻止一个'团队'在那一年被分配。

0 个答案:

没有答案