我有一个数据框:
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
任何人都可以帮助实现相同目标。
答案 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