我有一个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.)我还需要阻止一个“团队”在这一年中被分配更多的人,如果他们在这一年的所有人都被分配之前达到了他们的“最大数量”。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐