根据另一列的百分位值在 [=10th=] 数据框中创建一个布尔列

Create a boolean column in pandas datafame based on percentile values of another column

我有一个包含多列的数据框。我想创建布尔列,标记值是否属于第 90 个百分位数及以上。

我的数据框也包含多个零。

示例:

Name  Value
Val1  1000
Val2  910
Val3  800
Val4  700
Val5  600
Val6  500
Val7  400
Val8  300
Val9  200
Val10 100
Val11 0

预期输出

Name  Value 90thper
Val1  1000    1
Val2  910     1
Val3  800     0
Val4  700     0
Val5  600     0
Val6  500     0
Val7  400     0
Val8  300     0
Val9  200     0
Val10 100     0
Val11 0       0

您可以使用 pd.Series.quantile 找到第 90 个百分位值并包括高于它的所有值。

val = df['Value'].quantile(.9, interpolation="lower") # val -> 910
df['90thper'] = df['Value'].ge(val).astype(int)

#     Name  Value  90thper
# 0   Val1   1000        1
# 1   Val2    910        1
# 2   Val3    800        0
# 3   Val4    700        0
# 4   Val5    600        0
# 5   Val6    500        0
# 6   Val7    400        0
# 7   Val8    300        0
# 8   Val9    200        0
# 9  Val10    100        0

假设您的数据框名为 df。你可以这样做:

df['90thper'] = (df['Value'] >= df['Value'].quantile(0.90)).apply(lambda x: int(x))

尝试quantile

df['new'] = df.Value.ge(df.Value.quantile(0.9)).astype(int)
df
     Name  Value  new
0    Val1   1000    1
1    Val2    910    1
2    Val3    800    0
3    Val4    700    0
4    Val5    600    0
5    Val6    500    0
6    Val7    400    0
7    Val8    300    0
8    Val9    200    0
9   Val10    100    0
10  Val11      0    0