Как использовать python apply / lambda / shift для получения значения предыдущей строки этого конкретного столбца на основе значения 2 столбцов? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть 2 столбца (FN1 и FN2), и на основании этого я должен создать еще один столбец (Финал)

FN1     FN2    Final
False   False   1
True    True    1
False   False   1
True    False   2
True    True    2
False   False   1 
True    True    1
True    True    1
  • Если FN1 равен False, Финал будет 1.

  • Если FN2 равен True, я буду предыдущим значением Final.

  • Но если FN2 равен False, мне нужно обновить его с помощьюпредыдущее значение Final +1 (т.е. увеличение на 1)

.Я попытался сделать это, используя shift(), но опять же, это не помогает в этом сценарии.

FN1     FN2    Final
False   False   1
True    True    1
False   False   1
True    False   2
True    True    2
False   False   1 
True    True    1
True    True    1

.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

с использованием лямбды:

df = pd.DataFrame({'FN1': [False, True, False, True, True, False, True, True],
                   'FN2': [False, True, False, False, True, False, True, True]
                   })

def f(fn1, fn2):
    global previousfinal
    previousfinal = 1 if not fn1 else previousfinal + 1 if not fn2 else previousfinal
    return previousfinal

previousfinal = 1
df['Final'] = df[['FN1', 'FN2']].apply(lambda x: f(*x), axis=1)
print(df)
0 голосов
/ 18 февраля 2019

Использование np.select:

df1 = df.shift()

cond1 = df['FN1'] == False
cond2 = (df['FN1']==True) & (df['FN2'] ==True)
cond3 = (df['FN1']==True) & (df['FN2'] == False)

df['Final'] = np.select([cond1,cond2,cond3], [1, df1['Final'], df1['Final']+1])

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