[英]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,我想返回值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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.