将多个条件值指定给新列中的百分位数

2024-03-29 02:22:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的数据框和百分位数,我想分配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

谢谢你的帮助。你知道吗


Tags: 数据返回值
1条回答
网友
1楼 · 发布于 2024-03-29 02:22:32

更新的解决方案

感谢@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

相关问题 更多 >