У меня есть фрейм данных, как показано ниже
df1 = pd.DataFrame({'person_id': [11, 21, 31, 41, 51],
'date_1': ['12/30/1961', '05/29/1967', '02/03/1957', '7/27/1959', '01/13/1971'],
'backward': [0,120,1,2,3],
'forward': [0,12,1,0,0]})
df1['date_1'] = pd.to_datetime(df1['date_1'])
Я бы хотел сделать
1) Сдвиг вперед date_1
столбец на основе значений из столбца forward
(добавить даты).
2) если столбец forward
имеет значение 0
, выберите значение из backward
и сместите дату backward
(вычесть даты)
3) если оба forward
и backward
равны 0
, это не повлияет на даты, как мы add/subtract 0 days to date
. В целях кодирования, если вы все еще хотите знать, какой столбец выбрать, мы можем рассмотреть столбец backward
.
Это то, что я пробовал
df1['new_date'] = df1['date_1'].sub(pd.to_timedelta(df1['forward'],unit='d'))
df1['bool'] = df1['date_1'].eq(df1['new_date']) # i do this to find out which rows aren't changed. So I can look at backward column to subtract days for these records
df1.loc[df1.bool == True, "new_date"] = df1['date_1'].sub(pd.to_timedelta(df1['backward'],unit='d'))
Я ожидаю, что мой результат будет похож на как показано ниже. Как вы можете видеть для последних 2 строк и 1-й строки, столбец forward
имел значение 0, поэтому мы выбираем значения из столбца backward
и subtract the dates