Как сопоставить предыдущее значение строки в том же столбце, используя df.iterrows ()? - PullRequest
2 голосов
/ 25 февраля 2020

Я пытаюсь сопоставить предыдущее значение строки с определенным значением, используя индексный номер. Но я не знаю, как это реализовать. Не могли бы вы помочь мне, как это сделать?

Пример:

operator_type   Operator
    =            None
    =            AND
    =            None
    =            OR
    =            None
    =            None

код, который я пытаюсь:

for index, row in df.iterrows():
       if row['Operator'] == None and row['operator_type'] == '=' and row['Operator'].(index-1).values != 'AND':
             print('alka')

Ошибка:

File "imed_cons_new.py", line 68
    if row['and_or_not_oprtor'] == None and row['operator_type'] == '=' and row['and_or_not_oprtor'].(index-1).values != 'AND':
                                                                                                     ^
SyntaxError: invalid syntax

Ответы [ 3 ]

1 голос
/ 25 февраля 2020

Вы можете попробовать векторизованное решение:

np.where((df['operator'].isna()) & (df['operator'].shift() != 'AND') & (df['operator_type'] == '='))[0]

Результат:

pd.DataFrame({'type':'alka'}, 
             index=np.where((df['operator'].isna()) & (df['operator'].shift() != 'AND') & (df['operator_type'] == '='))[0])

OUT:
  type
0 alka
4 alka
5 alka
1 голос
/ 25 февраля 2020

Вы должны попробовать "shift ()"

df['previous'] = df['Operator'].shift()

for index, row in df.iterrows():
   if row['Operator'] == None and row['operator_type'] == '=' and row['previous'] != 'AND':
     print(index,'alka')

вывод:

0 alka
4 alka
5 alka
0 голосов
/ 25 февраля 2020

Как говорит ошибка, это просто синтаксические ошибки. Есть лучшие способы сделать то, что вы пытаетесь сделать, но сейчас просто внесите следующее изменение

   if row['Operator'] == None and row['operator_type'] == '=' and row['Operator'].(index-1).values != 'AND':

в

   if row['Operator'] == None and row['operator_type'] == '=' and row['Operator'][index-1]  != 'AND':
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...