Я пытаюсь создать столбец индикатора в кадре данных, который просматривает значения столбца входа и выхода и создает окно, которое имеет следующую логику:
- Найти самую раннюю дату, когда запись представляет собой 1(1/3/2019) и пометьте окно как 1.
- Окно остается 1 до тех пор, пока выход не станет равным 1 (05.01.2009).
- Окно становится 0, пока не найдет следующее значениезаписи, равной 1 (1/8/2019).
- Процесс повторяется до самой последней даты в DataFrame.
Так что для столбца Window должен следовать выходзапись или для каждой записи в конечном итоге будет выход (см. пример ниже).Также обратите внимание, что индекс даты находится в обратном порядке.
df = pd.DataFrame({'C1':[5,3,4,5,4,2,1,4,5,4,2,3],
'C2':[3,3,2,3,4,1,3,2,3,5,3,3]},
index = pd.date_range('1/1/2019',periods = 12))
df1 = df.iloc[::-1]
# Create function to add entry and exit criteria
def window_range(df):
crit1 = ((df['C1'] >2) & (df['C1'].shift(-1) < df['C1']))
crit2 = (df['C2'].shift(-1)==3)
entry = crit1&crit2
df['Entry'] = np.where(entry,1,0)
exit = (df['C1'] < df['C1'].shift(-1))
df['Exit'] = np.where(exit,1,0)
return df
df2 = window_range(df1)
df2
# The Column I'd like to add
window = list([1,0,1,1,1,0,0,1,1,1,0,0])
df2['window'] = pd.Series(window, index=df2.index)
df3 = df2
# Desired Final Output
df3