簡體   English   中英

將多個條件值分配給百分位數到新的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,我想返回值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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM