Python 3.x 以日期为单位计算日龄可用性实际日期出生-否则考虑暂定DOB列-熊猫
我有如下所示的df df: 关于df: 实际出生日期-实际出生日期 暂定出生日期-暂定出生日期-如果没有确切的出生日期-只有出生年份-则假定出生日期为出生年份的1月1日 根据上面的内容,我想根据下面解释的条件计算一个名为age_in_days的列 步骤:Python 3.x 以日期为单位计算日龄可用性实际日期出生-否则考虑暂定DOB列-熊猫,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有如下所示的df df: 关于df: 实际出生日期-实际出生日期 暂定出生日期-暂定出生日期-如果没有确切的出生日期-只有出生年份-则假定出生日期为出生年份的1月1日 根据上面的内容,我想根据下面解释的条件计算一个名为age_in_days的列 步骤: 1. If Actual_DOB is available (not an NaT) age_in_days是从实际DOB到2021-03-31的天数 df['Actual_DOB'],df['Tentative_DOB'], df['age
1. If Actual_DOB is available (not an NaT)
age_in_days是从实际DOB到2021-03-31的天数
df['Actual_DOB'],df['Tentative_DOB'], df['age_in_days']=pd.to_datetime(df['Actual_DOB']),pd.to_datetime(df['Tentative_DOB']),pd.Timestamp('2021-03-31')
age_in_days是从暂定日期到2021-03-31的天数
df['Actual_DOB'],df['Tentative_DOB'], df['age_in_days']=pd.to_datetime(df['Actual_DOB']),pd.to_datetime(df['Tentative_DOB']),pd.Timestamp('2021-03-31')
我尝试了以下代码:
df['Actual_DOB'] = pd.to_datetime(df.Actual_DOB)
df['Tentative_DOB'] = pd.to_datetime(df.Tentative_DOB)
df['age_in_days1'] = (pd.Timestamp('2021-03-31') - df.Actual_DOB).dt.days
df['age_in_days2'] = (pd.Timestamp('2021-03-31') - df.Tentative_DOB).dt.days
预期产出:
ID Actual_DOB Tentative_DOB age_in_days
1 NaN 2002-01-01 7029
2 2020-06-23 2020-01-01 281
3 NaT NaT NaN
4 2018-06-29 NaT 1006
使用np.selectcondition\u列表、结果列表
res=[df['age_in_days']-df.Actual_DOB,df['age_in_days']-df.Tentative_DOB]
将日期强制为datetime,并用2021-03-31追加tcolumn
df['Actual_DOB'],df['Tentative_DOB'], df['age_in_days']=pd.to_datetime(df['Actual_DOB']),pd.to_datetime(df['Tentative_DOB']),pd.Timestamp('2021-03-31')
条件列表
cond=[df.Actual_DOB.notna(),df.Tentative_DOB.notna()]
成绩表
res=[df['age_in_days']-df.Actual_DOB,df['age_in_days']-df.Tentative_DOB]
np.在哪里
df['age_in_days']=np.select(cond,res, np.nan)/ np.timedelta64(1, 'D')
使用np.selectcondition\u列表、结果列表
res=[df['age_in_days']-df.Actual_DOB,df['age_in_days']-df.Tentative_DOB]
将日期强制为datetime,并用2021-03-31追加tcolumn
df['Actual_DOB'],df['Tentative_DOB'], df['age_in_days']=pd.to_datetime(df['Actual_DOB']),pd.to_datetime(df['Tentative_DOB']),pd.Timestamp('2021-03-31')
条件列表
cond=[df.Actual_DOB.notna(),df.Tentative_DOB.notna()]
成绩表
res=[df['age_in_days']-df.Actual_DOB,df['age_in_days']-df.Tentative_DOB]
np.在哪里
df['age_in_days']=np.select(cond,res, np.nan)/ np.timedelta64(1, 'D')
有了你们展示的样品,你们能试一下下面的吗。在这里与函数一起使用。简单的解释是,创建一个日期变量,在这个变量中,我们在Actuak_DOB列中填充关于暂定_DOB列的NaN值。然后使用pd.to.datetime函数确保时间格式正确。最后,用OP给出的2021-03-31日期减去日期变量值,并将其转换为天,生成一个新的DataFrame列
date = df['Actual_DOB'].fillna(df['Tentative_DOB'])
date = pd.to_datetime(date,yearfirst=True)
df['age_in_days'] = (pd.Timestamp('2021-03-31')-date).dt.days
数据帧的输出如下:
ID Actual_DOB Tentative_DOB age_in_days
0 1 NaN 2002-01-01 7029.0
1 2 2020-06-23 2020-01-01 281.0
2 3 NaN NaN NaN
3 4 2018-06-29 NaN 1006.0
有了你们展示的样品,你们能试一下下面的吗。在这里与函数一起使用。简单的解释是,创建一个日期变量,在这个变量中,我们在Actuak_DOB列中填充关于暂定_DOB列的NaN值。然后使用pd.to.datetime函数确保时间格式正确。最后,用OP给出的2021-03-31日期减去日期变量值,并将其转换为天,生成一个新的DataFrame列
date = df['Actual_DOB'].fillna(df['Tentative_DOB'])
date = pd.to_datetime(date,yearfirst=True)
df['age_in_days'] = (pd.Timestamp('2021-03-31')-date).dt.days
数据帧的输出如下:
ID Actual_DOB Tentative_DOB age_in_days
0 1 NaN 2002-01-01 7029.0
1 2 2020-06-23 2020-01-01 281.0
2 3 NaN NaN NaN
3 4 2018-06-29 NaN 1006.0