Я думаю, вы должны понимать (в python 3.x), что результаты
df.loc[i,'dir_1'] == ('E' or 'NE' or 'SE')
всегда будут False
, если только df.loc [i, 'dir_1'] фактически равен 'E'
Таким образом, операторы if
должны быть изменены на что-то вроде
if df.loc[i,'dir_1'] in ['E', 'NE', 'SE']:
Аналогично, вы можете использовать in
в последнем операторе сравнения.
Тогда конечная функция будет:
def dir_func(df):
for i in df.index:
if df.loc[i,'dir_1'] in ['E', 'NE', 'SE']:
df.loc[i,'dir_fin'] = 'E'
elif df.loc[i,'dir_1'] in ['W', 'NW', 'SW']:
df.loc[i,'dir_fin'] = 'W'
else:
if df.loc[i,'dir_2'] in ['E', 'NE', 'SE']:
df.loc[i,'dir_fin'] = 'E'
elif df.loc[i,'dir_2'] in ['W', 'NW', 'SW']:
df.loc[i,'dir_fin'] = 'W'
else:
if (df.loc[i,'loc_01'].lower() in ("\seb\s", "\seast\s", "\seastbound", "\se\s")) or (speed_overspeed.loc[i,'loc_02'] in ("\seb\s", "\seast\s", "\seastbound", "\se\s")):
df.loc[i,'dir_fin'] = 'E'
elif (df.loc[i,'loc_01'].lower() in ("\swb\s", "\swest\s", "\swestbound", "\sw\s")) or (speed_overspeed.loc[i,'loc_02'] in ("\swb\s", "\swest\s", "\swestbound", "\sw\s")):
df.loc[i,'dir_fin'] = 'W'
else:
df.loc[i,'dir_fin'] = 'NA'