我有一个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',我还需要阻止一个'团队'在那一年被分配。