Pandas - 基于每列的前 x% 值,标记为新数字

Pandas - Based on top x% value of each column, Mark as new number

我下面有一个 pandas 数据框:

    df

    name    value    
0   Jack       3      
1   Luke       3      
2   Mark       2      
3   Chris      1      
4   Ace        10
5   Isaac      8

基于 "value" 列,我希望将前 50% 的值标记为 1,将后 50% 的值标记为 0。

期待得到以下结果:

    Results

    name    value      percent mark  
0   Jack       3            0
1   Luke       4            1
2   Mark       2            0
3   Chris      1            0
4   Ace        10           1
5   Isaac      8            1

提前致谢。

您可以将一个序列与其中位数进行比较,然后将 bool 转换为 int:

df['percent_mark'] = (df['value'] > df['value'].median()).astype(int)

对于特定百分比,使用 pd.Series.quantile。例如:

df['percent_mark'] = (df['value'] > df['value'].quantile(0.25)).astype(int)

您也可以使用 numpy,这可能更快

import numpy as np
df['percent_mark_50'] = np.where(df.value > df.value.median(), 1, 0)

df['percent_mark_25'] = np.where(df.value > np.percentile(df.value, 25), 1, 0)