У меня есть кадр данных, как показано ниже
df = pd.DataFrame({'subject_id' :[1,2,3,4,5],
'date_of_interview':['2007-05-27','2008-03-13','2010-11-19','2011-10-05','2004-11-02'],
'Age':[31,35,78,72,43],
'value':[6,0.33,1990,np.nan,2001],
'age_detected':[25,35,98,65,40]})
df['date_of_interview'] = pd.to_datetime(df['date_of_interview'])
Я хотел бы создать новый столбец с именем dis_date
на основе value
и age_detected
столбец
Пример: subject_id = 1 имеет date_of_interview как 2007-05-27. Если мы посмотрим на его столбец значений, мы увидим, что он имеет значение 6, что означает, что мы должны вычесть 6 лет из date_of_interview, чтобы получить 2001-05-27
как dis_date
Принимая во внимание, что если вы посмотрите на subject_id = 3 он имеет значение года в столбце значений, поэтому его dis_date будет 1990-11-19
Когда в столбце значений NA
, мы должны посмотреть на его столбец age_detected
и вычесть его из Age
чтобы получить количество лет.
Например: subject_id = 4 имеет Age
как 72 и AGE_DETECTED
как 65. Теперь разница равна 7, а его dis_date будет 2004-10-05
Обратите внимание на значения в столбце значений, если менее 6 цифр соответствуют числу лет. Если это 1, значит вычесть 1 год. Если это 0,33, то вычесть 4 месяца. 1 год = 12 месяцев. 0,33 = 3,96 месяца (4 месяца)
Я пробовал что-то подобное, но это не помогло
for i in range(len(df['value'])):
if (len(str(df['value'][i]))) < 6:
df['dis_date'] = df['date_of_interview'] - pd.DateOffset(years=df['value'][i])
Я ожидаю, что мой результат будет таким, как показано ниже