我有以下具有百分位数的数据框,我想将0-9之间的值分配给各自的百分位数。
这是输入:
a
1 0.3038
2 0.0572
3 0.1153
4 0.2168
5 0.5688
6 0.6291
7 0.9416
8 0.7438
9 0.2242
10 0.5662
这是理想的输出:
a b
1 0.3038 3
2 0.0572 0
3 0.1153 1
4 0.2168 2
5 0.5688 5
6 0.6291 6
7 0.9416 9
8 0.7438 7
9 0.2242 2
10 0.5662 5
另外,如果列中的值为' a'是1.00我想返回值9。 例如:
a b
1 1.0000 9
感谢您的帮助。
答案 0 :(得分:3)
更新了解决方案
感谢@Peter Leimbigler在评论中提出以下建议,以确保正确处理1.0映射到9的要求:
np.floor(df['a']*10).replace({10:9})
或者,坚持上一个解决方案中存在的clip_upper()
想法:
np.floor(df.clip_upper(0.9) * 10).astype(int)
上述解决方案中的 0.9
实际上可以是任意数字[0.9, 1)
,并且可以按预期工作。之前的解决方案中的问题是此处使用了1
,这意味着精确1.0
的值未向下舍入。
我将保留下面的原始解决方案,因为它已被OP接受,但正如@Peter Leimbigler指出的那样,它没有正确处理1.0 - > 9特例。
以前的解决方案
如果我理解正确:
df['b'] = np.floor(df.clip_upper(1) * 10).astype(int)
与问题和结果相同的结果给出了关于正好为1的数字的警告。
a b
1 0.3038 3
2 0.0572 0
3 0.1153 1
4 0.2168 2
5 0.5688 5
6 0.6291 6
7 0.9416 9
8 0.7438 7
9 0.2242 2
10 0.5662 5