Я думал, что знаю, как это сделать, но я дергаю себя за волосы.Я пытаюсь использовать функцию для создания нового столбца.Функция просматривает значение столбца win в текущей строке и должна сравнить его с предыдущим числом в столбце win, как указано ниже в операторах if.Столбец выигрыша всегда будет равен 0 или 1.
import pandas as pd
data = pd.DataFrame({'win': [0, 0, 1, 1, 1, 0, 1]})
print (data)
win
0 0
1 0
2 1
3 1
4 1
5 0
6 1
def streak(row):
win_current_row = row['win']
win_row_above = row['win'].shift(-1)
streak_row_above = row['streak'].shift(-1)
if (win_row_above == 0) & (win_current_row == 0):
return 0
elif (win_row_above == 0) & (win_current_row ==1):
return 1
elif (win_row_above ==1) & (win_current_row == 1):
return streak_row_above + 1
else:
return 0
data['streak'] = data.apply(streak, axis=1)
Все это заканчивается этой ошибкой:
AttributeError: ("'numpy.int64' object has no attribute 'shift'", 'occurred at index 0')
В других примерах я вижу функции, которые ссылаются на df['column'].shift(1)
, поэтомуЯ смущен, почему я не могу сделать это в этом случае.
Вывод, который я тоже пытаюсь получить, таков:
result = pd.DataFrame({'win': [0, 0, 1, 1, 1, 0, 1], 'streak': ['NaN', 0 , 1, 2, 3, 0, 1]})
print(result)
win streak
0 0 NaN
1 0 0
2 1 1
3 1 2
4 1 3
5 0 0
6 1 1
Спасибо за помощь, чтобы освободить меня.