Как ссылаться на последовательные значения в массиве в пандах - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь создать новый столбец в кадре данных, который выпадает 1, когда выполняются два условия: (1) ячейка в соседнем столбце больше 0 и (2) ячейка в соседнем столбце, один предыдущая строка также больше 0. Вот код:

def rule(x, y):
if x > 0 and y > 0:
     return 1
else:
     return 0

df = pd.DataFrame({ 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]})
df['new'] = df.apply(lambda x: rule(x['c2'], x['c2']), axis =  1)
df.head()

Я не уверен, как следует записывать ссылки на массивы в лямбда-функции, но я думаю, что это более или менее похоже на лямбда-функцию.

1 Ответ

0 голосов
/ 19 марта 2019

Используйте функциональность shift для создания временного столбца, а затем используйте apply, например:

df = pd.DataFrame({ 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]})
df['c2_shifted'] = df['c2'].shift(1)

def rule(row):
    return row['c2']>0 and row['c2_shifted'] > 0

df['new'] = df.apply(rule, axis =  1)

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