У меня есть фрейм данных (df), где голова выглядит так:
BB NEW_DATE PICKED
1123 03/10/2018 03/10/2018
1123 04/10/2018 04/10/2018
1123 05/10/2018 05/10/2018
1123 09/10/2018 09/10/2018
1123 04/01/2013 01/04/2013
1123 07/01/2013 07/01/2013
1123 08/01/2013 08/01/2013
Я пытаюсь добавить новый столбец с именем FINAL
, чьи значения частично зависят от предыдущих значений строки FINAL
.
if df['PICKED'] < df['FINAL'].shift(-1):
if df['NEW_DATE'].isnumeric():
df['FINAL'] = df['NEW_DATE']
else:
df['FINAL'] = df['PICKED']
df['FINAL'] = df['PICKED']
Для каждой строки, если PICKED
меньше, чем предыдущее значение строки FINAL
, то, если NEW_DATE
является действительной датой, текущее значение строки FINAL
равно текущему значению строки NEW_DATE, в противном случае FINAL равен равно PICKED
. Если PICKED
больше или равно значению предыдущих строк FINAL
, тогда FINAL
равно PICKED
.
поэтому в приведенном выше фрейме данных столбец FINAL
будет выглядеть так:
BB NEW_DATE PICKED FINAL
1123 03/10/2018 03/10/2018 03/10/2018
1123 04/10/2018 04/10/2018 04/10/2018
1123 05/10/2018 05/10/2018 05/10/2018
1123 09/10/2018 09/10/2018 09/10/2018
1123 04/01/2013 01/04/2013 04/01/2013
1123 07/01/2013 07/01/2013 07/01/2013
1123 08/01/2013 08/01/2013 08/01/2013
Я безуспешно пытался закодировать это с помощью:
df['FINAL'] = np.where(df['PICKED'] < df['FINAL'].shift(-1), df.NEW_DATE.fillna(df.DATE), df['PICKED'])
Я также пробовал:
for row in df.iterrows:
if index == 0 :
row['FINAL'] = row['NEW_DATE']
else:
if row['PICKED'] < row['FINAL'].shift(-1):
if isinstance(row['NEW_DATE'], pd.DatetimeIndex):
row['FINAL'] = row['NEW_DATE']
else:
row['FINAL'] = row['PICKED']
else:
row['FINAL'] = row['PICKED']
но я получаю ошибку: TypeError: 'method' object is not iterable