根据列值展开数据框并创建新列

时间:2019-11-04 13:11:12

标签: python pandas numpy

我有一个数据框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折的过程。

  1. 基于a_count扩展数据集
  2. 将权重划分为a_count项,并创建一个新列weight_i。问题是每个weight_i应该大于50。

例如,第一行将有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%。

任何人都可以提供帮助。

谢谢

0 个答案:

没有答案