根据约束生成列增量

时间:2019-11-04 15:11:32

标签: python pandas numpy

我有一个数据框:

date_1     Count
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21
01/09/2019  21

我想生成一个列增量,以使60%的计数值(四舍五入)具有值2,其余的具有4。

例如,对于date_1 = 01/09/2019有21个条目,因此0.6 * 21 = 12.6〜13个值的增量为2,其余的增量为4

预期输出:

date_1     Count   delta
01/09/2019  21     2
01/09/2019  21     2
01/09/2019  21     2
01/09/2019  21     2
01/09/2019  21     2
01/09/2019  21     2
.           .      . 
.           .      .
01/09/2019  21     4
01/09/2019  21     4
01/09/2019  21     4 

任何人都可以帮助实现相同目标。

1 个答案:

答案 0 :(得分:1)

使用Groupby.transform使用np.where来转换2或4的系列中的列数 用2填充60%的长度,用4填充40%的长度:

df['delta']=df.groupby('date_1')['Count'].transform(lambda x: np.where ( (x.reset_index(drop=True).index+1 < round(len(x)*0.6)),2,4)  ).sample(frac=1).reset_index(drop=True)
print(df)

print(df)

        date_1  Count  delta
0   01/09/2019     21      2
1   01/09/2019     21      4
2   01/09/2019     21      2
3   01/09/2019     21      2
4   01/09/2019     21      2
5   01/09/2019     21      2
6   01/09/2019     21      4
7   01/09/2019     21      2
8   01/09/2019     21      4
9   01/09/2019     21      2
10  01/09/2019     21      2
11  01/09/2019     21      4
12  01/09/2019     21      4
13  01/09/2019     21      2
14  01/09/2019     21      4
15  01/09/2019     21      4
16  01/09/2019     21      4
17  01/09/2019     21      2
18  01/09/2019     21      4
19  01/09/2019     21      2
20  01/09/2019     21      2