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