Pythoni c способ назначения меток на основе процентиля значений в кадре данных - PullRequest
0 голосов
/ 03 августа 2020

Я хочу знать, как лучше всего подойти к решению следующей у меня проблемы.

У меня есть фрейм данных python, содержащий 3 предварительно рассчитанных значения, связанных с идентификатором. Я хочу присвоить метку этому идентификатору на основе процентиля, связанного со значением, соответствующим одному из вычисленных столбцов

заданных данных:

### note : VAL1 is a rank i.e lower the better
###.       VAL2 is just a number associated to the ID where the higher the number the better. Assume VAL2 min = 0, max = 25000
df = pd.DataFrame({"ID": [132, 444, 323], "VAL1": [0.82, 0.16, 0.48], "VAL2": [24000, 6242, 16824]})
    #     ID      VAL1     VAL2
    # 0   132     0.82     24000
    # 1   444     0.16     6242
    # 2   323     0.48     16824

желаемого результата:

output_df = 
    #     ID      VAL1     VAL2     VAL1_LABEL     VAL2_LABEL
    # 0   132     0.82     24000    bottom50%      top25%
    # 1   444     0.16     6242     top25%         bottom50%
    # 2   323     0.48     16824    middle25-50%   middle25-50%

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Назначьте его как

df['VAL1_LABEL'] = pd.qcut(df.VAL1,[0,.5,.75,1], labels=['bottom25%','middle25%-50%','top25%']) 
Out[199]: 
0       top25%
1    bottom25%
2    bottom25%
Name: VAL1, dtype: category
1 голос
/ 03 августа 2020

Из того, что я могу сказать по вашему вопросу, это близко к тому, что вы ищете:

#take 1-the proportion to get the inverse that you want
df["VAL1_LABEL"] = 1 - df.VAL1/sum(df.VAL1)
df["VAL1_LABEL"] = np.where(df.VAL1_LABEL<df.VAL1_LABEL.mean(),"bottom50%","top50%")

Вы можете дополнительно указать в нем, добавив вложенные условия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...