#python #if-statement
#python #оператор if
Вопрос:
Я пытаюсь разделить данные на категории на основе значений. Таким образом, значениям выше -25 присваивается уровень медведя 0 и так далее. Но когда я смотрю на данные, я вижу, что есть значения ниже -25, которым присваивается уровень медведя 0. И это верно для всех категорий.
###############################################################
Bear_level = ['high', 'medium-high', 'medium', 'medium-low', 'low', 'very-low']
Level=[]
for value in data_shifted[k]['SCI300max [um]']:
if value >= -25:
Level.append(Bear_level[0])
elif value < -25 and value >= -50:
Level.append(Bear_level[1])
elif value < -50 and value >= -75:
Level.append(Bear_level[2])
elif value < -75 and value >= -100:
Level.append(Bear_level[3])
elif value < -100 and value >= -150:
Level.append(Bear_level[4])
else:
Level.append(Bear_level[5])
Amount = 0
for i in Bear_level:
for m in range(int(len(Level))):
if Level[m] ==i:
Amount = 1
print(Amount)
Amount = 0
for k in data_shifted:
data_shifted[k]['Bear Level']= Level
data_interp={k:[] for k in progression}
for k in data_interp:
data_interp[k]=data_shifted[k][['Chainage [m]', 'Driving Speed [m/s]', 'Latitude', 'Longitude', 'Road temperature [C]', 'Air temperature [C]','Temp corrected Bells2_50','Load Left [kg]','Load Right [kg]', 'Dmax [um]', 'D0 [um]', 'D300 [um]', 'D600 [um]', 'D900 [um]', 'D1200 [um]', 'D1500 [um]', 'SCI300max [um]','SCI300 [um]','SCI300diff [um]', 'SCI600max [um]','SCI600 [um]', 'SCI900max [um]','SCI900 [um]', 'SCI600max-SCI300max [um]', 'SCI900max-SCI600max [um]','speedfilter', 'Bear Level', 'Traffic [ESALs x day]', 'Layer1 Thickness [m]']]
data_interp[k]= data_interp[k][data_interp[k]['speedfilter']=='Pass']
all_data_list = [ v for k,v in data_interp.items()]
all_data = pd.concat(all_data_list ,axis=0)
all_data.to_csv("all_data.csv", index=True, header=True)##### generate csv file with all data
H_bear_section = all_data[all_data['Bear Level'] == Bear_level[0]]
MH_bear_section = all_data[all_data['Bear Level'] == Bear_level[1]]
M_bear_section = all_data[all_data['Bear Level'] == Bear_level[2]]
ML_bear_section = all_data[all_data['Bear Level'] == Bear_level[3]]
L_bear_section = all_data[all_data['Bear Level'] == Bear_level[4]]
VL_bear_section = all_data[all_data['Bear Level'] == Bear_level[5]]
####### Correlations analysis##################
Я надеюсь, что есть кто-то, кто способен увидеть проблему, поскольку я теряюсь в поисках идей.
Комментарии:
1. В первом цикле for я не понимаю роли переменной
k
. Сначала я подумал, что у вас есть числовая таблица (двумерная), но эта строка заставляет меня задуматься, поскольку кажется, чтоdata_shifted[k]['SCI300max [um]']
это массив. Но тогда я действительно не понимаю, почему вы копируете один и тот же массивLevel
в каждомdata_shifted[k]['Bear Level']
. Не могли бы вы, пожалуйста, объяснить типы данных?2. сначала вам нужно проверить свою логику на самый экстремальный вариант. каждое значение меньше -25
3. Спасибо, что рассмотрели мою проблему. Таким образом, data_shifted — это словарь с 17 фреймами данных. От 0 до 16. Изначально я начал с [0] вместо [k], но это ничего не изменило.
4. @BendikKnapstad Спасибо, что рассмотрели мою проблему. Это имеет смысл. Я попробую это.
5. Пожалуйста, предоставьте воспроизводимый пример, с тестовым вводом и выводом, показывающим некорректность
Ответ №1:
вам нужно изменить свою логику. все значения ниже -25: поэтому сначала вам нужно проверить наименьшее число
for value in data_shifted[k]['SCI300max [um]']:
if value <= -150:
Level.append(Bear_level[5])
elif value < -100 and value >= -150:
Level.append(Bear_level[4])
elif value < -75 and value >= -100:
Level.append(Bear_level[3])
elif value < -50 and value >= -75:
Level.append(Bear_level[2])
elif value < -25 and value >= -50:
Level.append(Bear_level[1])
else:
Level.append(Bear_level[0])
И вам действительно не нужны предложения and:
for value in data_shifted[k]['SCI300max [um]']:
if value <= -150:
Level.append(Bear_level[5])
elif value < -100:
Level.append(Bear_level[4])
elif value < -75:
Level.append(Bear_level[3])
elif value <:
Level.append(Bear_level[2])
elif value < -25:
Level.append(Bear_level[1])
else:
Level.append(Bear_level[0])
Комментарии:
1. Ваше второе условие никогда не будет истинным
2. Итак, я попытался изменить логику и заменить 0 на k. Но все равно получаю фреймы данных со значениями за пределами диапазона.
Level=[] for value in data_shifted[0]['SCI300max [um]']: if value < -150: Level.append(Bear_level[5]) elif value < -100 and value >=150: Level.append(Bear_level[4]) elif value < -75 and value >= -100: Level.append(Bear_level[3]) elif value < -50 and value >= -75: Level.append(Bear_level[2]) elif value < -25 and value >= -50: Level.append(Bear_level[1]) else: Level.append(Bear_level[0])