【发布时间】:2020-05-19 02:09:44
【问题描述】:
我有一个如下所示的数据框
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'])
我想基于value 和age_detected 列创建一个名为dis_date 的新列
例如:subject_id = 1 的 date_of_interview 为 2007-05-27。如果我们查看他的值列,我们可以看到他的值为 6,这意味着我们必须从 date_of_interview 中减去 6 年才能得到 2001-05-27 作为 dis_date
而如果你看一下 subject_id = 3,他在 value 列中有一个年份值,所以他的 dis_date 将是1990-11-19
当 value 列中有NA 时,我们必须查看他的age_detected 列并从Age 中减去它以获得年数。
例如:subject_id = 4 的 Age 为 72,AGE_DETECTED 为 65。现在 diff 是 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])
我希望我的输出如下所示
【问题讨论】:
-
您如何定义
0.33年?12/4? -
1 年 = 12 个月。 0.33 = 3.96 个月(4 个月)
-
今晚回家后我会看看这个。
-
2007-12-13正确吗?因为如果减去 4 个月得到2007-11-13 -
可能是我的样本不正确。现在会检查。
标签: python pandas list dataframe python-datetime