У меня есть dataframe
с некоторыми числовыми значениями, хранящихся в столбце «значение» в сопровождении своих категорических tresholds (предупреждение уровней в данном случае), которые хранятся в других столбцах (в моем случае «низкий», «средний», «высокий»):категоризация Панда колонок с indiviual пользовательских бункеров (tresholds)
value low middle high
0 179.69 17.42 88.87 239.85
1 2.58 17.81 93.37 236.58
2 1.21 0.05 0.01 0.91
3 1.66 0.20 0.32 4.57
4 3.54 0.04 0.04 0.71
5 5.97 0.16 0.17 2.55
6 5.39 0.86 1.62 9.01
7 1.20 0.03 0.01 0.31
8 3.19 0.08 0.01 0.45
9 0.02 0.03 0.01 0.10
10 3.98 0.18 0.05 0.83
11 134.51 78.63 136.86 478.27
12 254.53 83.73 146.33 486.65
13 15.36 86.07 13.74 185.16
14 85.10 86.12 13.74 185.16
15 15.12 1.37 6.09 30.12
Я хотел бы знать, в какой категории относится каждое значение (например, первое значение будет среднего, се cond будет ниже_low, так как он меньше, чем любой из его пунктов, третий будет высокий, ... вы получите идею). Так вот ожидаемый выход:
value low middle high category
0 179.69 17.42 88.87 239.85 middle
1 2.58 17.81 93.37 236.58 below_low
2 1.21 0.05 0.01 0.91 high
3 1.66 0.20 0.32 4.57 middle
4 3.54 0.04 0.04 0.71 high
5 5.97 0.16 0.17 2.55 high
6 5.39 0.86 1.62 9.01 middle
7 1.20 0.03 0.01 0.31 high
8 3.19 0.08 0.01 0.45 high
9 0.02 0.03 0.01 0.10 middle
10 3.98 0.18 0.05 0.83 high
11 134.51 78.63 136.86 478.27 low
12 254.53 83.73 146.33 486.65 middle
13 15.36 86.07 13.74 185.16 middle
14 85.10 86.12 13.74 185.16 middle
15 15.12 1.37 6.09 30.12 middle
До сих пор я использую эту уродливую процедуру «вручную» проверка построчно, остановка на первой категории (от высшего к низшему), будучи больше, что текущее значение:
df["category"]="below_low"
for i in df.index:
for cat in ["high","middle","low"]:
if df.loc[i,"value"]>df.loc[i,cat]:
df.loc[i,"category"]=cat
break
Я знаю о методе pd.cut()
, но я только знаю, как использовать его с заданным списком родового tresholds. Может ли кто-нибудь сказать, что мне не хватает?
я рекомендую набор вложенных вызовов 'numpy.where' –