我有以下带有百分位数的数据框,我想将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
谢谢您的帮助。
最佳答案
更新的解决方案
感谢@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
关于python - 将多个条件值分配给百分位数到新的pandas列中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49501510/