将多个条件值分配给新的 pandas 列的百分位数
Assign multiple conditional values to percentiles into a new pandas column
我有以下带有百分位数的数据框,我想将 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,我想 return 值 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
我有以下带有百分位数的数据框,我想将 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,我想 return 值 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