我有一个数据框df:
Date_1 Date_2 weight a_count
01/09/2019 02/08/2019 251 2
01/09/2019 02/08/2019 251 2
01/09/2019 10/08/2019 322 3
01/09/2019 10/08/2019 322 3
01/09/2019 10/08/2019 322 3
01/09/2019 12/08/2019 414 4
01/09/2019 12/08/2019 414 4
01/09/2019 12/08/2019 414 4
01/09/2019 12/08/2019 414 4
01/09/2019 14/08/2019 531 5
01/09/2019 14/08/2019 531 5
01/09/2019 14/08/2019 531 5
01/09/2019 14/08/2019 531 5
01/09/2019 14/08/2019 531 5
我想做一个2折的过程。
例如,第一行将有2个条目,且weight_i
的总和等于weight
列
我尝试使用:
def f(x):
i = np.random.random(len(x))
j = i/sum(i) * x
return j
df2 = df1.reindex(df1.index.repeat(df1['a_count']))
df2['weight_i'] = df2.groupby(['Date_1','Date_2'])['weight'].transform(f)
这实际上是分配权重,以便为每个条目聚合的weight_i等于权重。
我也想达到第二个条件,即weight_i应该始终大于50。
在某些情况下,不可能所有条目都大于50。我想到了使用:
df2['weight_i'].loc[df2['weight_i'] <= 49] = 0
但是将它们分配为0不允许我将weight_i加起来等于特定条目的权重。
我想使weight_i大于50,并且如果权重已用尽,则将0分配给条目,并且那些条目(将weight_i为0)不应大于计数的30%。
任何人都可以提供帮助。
谢谢