Каскадирование нескольких условий со статусом if для создания 2 категориальных столбцов - PullRequest
1 голос
/ 26 февраля 2020

Ну, это было похоже на полчаса, написание и переписывание этого безуспешно: надеюсь, что какая-то капризная душа может помочь мне с некоторой мудростью

Вот два куска кода, которые я пробовал, самые основные c те, которые я пробовал раньше, тоже не работали: я пытаюсь сделать 2 столбца с этим, если еще условно, я не могу понять, что происходит ...

vel_sign = []
ac_sign = []
for i in range(len(X_train)):
    if (int(X_train['Velocidad'][i]) > 0) and (int(X_train['Aceleracion'][i]) > 0):
        vel_sign.append(1)     
        ac_sign.append(1)
    elif (int(X_train['Velocidad'][i]) > 0) and (int(X_train['Aceleracion'][i]) == 0):
        vel_sign.append(1)
        ac_sign.append(0)
    elif (int(X_train['Velocidad'][i]) > 0) and (int(X_train['Aceleracion'][i]) < 0):
        vel_sign.append(1)
        ac_sign.append(-1)
    else: pass

vel_sign = []
ac_sign = []

for i in range(len(X_train)):(
    if (X_train['Velocidad'][i] > 0):
        vel_sign.append(1)        
        if  (X_train['Aceleracion'][i] > 0): 
            ac_sign.append(1)
        elif (X_train['Aceleracion'][i] == 0): 
            ac_sign.append(0)
        elif (X_train['Aceleracion'][i] < 0):
            ac_sign.append(-1)
        else:pass
    elif (X_train['Velocidad'][i] == 0):
        vel_sign.append(0)
        if  (X_train['Aceleracion'][i] > 0): 
            ac_sign.append(1)
        elif (X_train['Aceleracion'][i] == 0): 
            ac_sign.append(0)
        elif (X_train['Aceleracion'][i] < 0):
            ac_sign.append(-1)
        else: pass
    elif (X_train['Velocidad'][i] < 0):
        vel_sign.append(-1)
        if  (X_train['Aceleracion'][i] > 0): 
            ac_sign.append(1)
        elif (X_train['Aceleracion'][i] == 0): 
            ac_sign.append(0)
        elif (X_train['Aceleracion'][i] < 0):
            ac_sign.append(-1)
        else: pass
    else: pass)

X_train['V_signo'] = vel_sign
X_train['A_signo'] = ac_sign
print(X_train.head())

Ошибка следующая

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-39-d5c1cf0b654a> in <module>
      2 ac_sign = []
      3 for i in range(len(X_train)):
----> 4     if (int(X_train['Velocidad'][i]) > 0) and (int(X_train['Aceleracion'][i]) > 0):
      5         vel_sign.append(1)
      6         ac_sign.append(1)

/opt/conda/lib/python3.6/site-packages/pandas/core/series.py in __getitem__(self, key)
   1069         key = com.apply_if_callable(key, self)
   1070         try:
-> 1071             result = self.index.get_value(self, key)
   1072 
   1073             if not is_scalar(result):

/opt/conda/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_value(self, series, key)
   4728         k = self._convert_scalar_indexer(k, kind="getitem")
   4729         try:
-> 4730             return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))
   4731         except KeyError as e1:
   4732             if len(self) > 0 and (self.holds_integer() or self.is_boolean()):

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 3

СПАСИБО !!!!!!!!!!!!!

1 Ответ

0 голосов
/ 27 февраля 2020

Я думаю, что получил ответ, но если у кого-то получится лучше, я бы хотел услышать его: D: D

def Signo(array):
    result = []
    for x in range(len(array)):
        if array[x] > 0:
            result.append(1)
        elif array[x] == 0:
            result.append(0)
        else:
            result.append(-1)
    return result

df['Vel_signo'] = Signo(df['Velocidad'].to_numpy())
df['Ac_signo'] = Signo(df['Aceleracion'].to_numpy())
...