我有以下带有百分位数的数据框,我想将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/

10-12 22:47