Функция не возвращает правильные значения (Python) - PullRequest
1 голос
/ 05 мая 2020

У меня есть функция ниже, которая должна возвращать стандартизованные выходные данные на основе числовых c диапазонов:

`def incident(count):
if count['incident_ct']<= 4: 
    val = 1 
elif count['incident_ct']>4 & count['incident_ct']<= 13: # 25 to 50%
    val = 2
elif count['incident_ct'] >13 & count['incident_ct']<=31: # 50 to 75%
    val = 4
elif count['incident_ct'] >31 & count['incident_ct']<=100: # 75 to 95%
    val = 8
else: 
    val = 16
return val`

Затем применяется к новой строке в данных:

`intersections['v_counts'] = intersections.apply(incident, axis = 1)`

Однако вывод не дает того, что я указал в диапазонах (только 1 или 2 в v_count) При просмотре моего кода инцидент_ct = 34 должен быть 8 и где инцидент_ct = 172 должно быть 16 enter image description here

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Давайте попробуем использовать pd.cut

pd.cut(intersections['incident_ct'],bins=[4,13,31,100,..],labels=[1,2,4,8,16])

Исправьте ваш код

def incident(count):
...     if count['incident_ct']<= 4:
...         val = 1
...     elif count['incident_ct']>4 and count['incident_ct']<= 13: # 25 to 50%
...         val = 2
...     elif count['incident_ct'] >13 and count['incident_ct']<=31: # 50 to 75%
...         val = 4
...     elif count['incident_ct'] >31 and count['incident_ct']<=100: # 75 to 95%
...         val = 8
...     else:
...         val = 16
...     return val
0 голосов
/ 05 мая 2020

Используйте круглые скобки при использовании '&' def incident(count): if count['incident_ct']<= 4: # lowest percent val = 1 elif (count['incident_ct']>4) & (count['incident_ct']<= 13): # 25 to 50% val = 2 elif (count['incident_ct'] >13) & (count['incident_ct']<=31): # 50 to 75% val = 4 elif (count['incident_ct'] >31) & (count['incident_ct']<=100): # 75 to 95% val = 8 else: # upper 5% val = 16 return val

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