将年龄函数应用于数据框列

时间:2018-02-01 15:26:19

标签: python pandas

我的数据框df包含date of birth列。头部看起来像:

    Date of birth
0      1957-04-30
1      1966-11-10
2      1966-11-10
3      NOT KNOWN
4      1958-10-28
5      1958-06-04

我还有一个名为referencePeriodEndDate的变量,它是yyyy-mm-dd格式的日期,例如2017-03-31

我正在尝试创建一个名为Age的新列,其年龄从Date of birthreferencePeriodEndDate

所以应用于每一行的功能如下:

(`referencePeriodEndDate` - df["Date of birth"]) / 365.25

Date of birth列中的行可能为空(null)或条目'NOT KNOWN',因此我需要将值'NOT KNOWN'返回到在新的年龄列中受影响column

我已经提出以下内容但它拒绝工作(或返回错误)

    df["Age"].apply(lambda row: TimeCalc(df,referencePeriodEndDate) if row.notnull() else "NOT KNOWN")


def TimeCalc(rawDatabase,referencePeriodEndDate):

     Age = ((referencePeriodEndDate - rawDatabase["Date of birth"]) / 365.25)

     return Age

所需的输出如下:

 Date of birth            Age
    30/04/1957    59.91786448
    10/11/1966    50.38740589
    10/11/1966    50.38740589
     NOT KNOWN      NOT KNOWN
    28/10/1958    58.42299795
    04/06/1958    58.82272416

1 个答案:

答案 0 :(得分:1)

您可以使用to_datetime

df['Dateofbirth']=pd.to_datetime(df['Dateofbirth'],errors='coerce')
df['Age']=(pd.to_datetime('2017-03-31')-df['Dateofbirth']).dt.days/365.25

df.fillna('unknow')
Out[370]: 
           Dateofbirth      Age
0  1957-04-30 00:00:00  59.9179
1  1966-11-10 00:00:00  50.3874
2  1966-11-10 00:00:00  50.3874
3               unknow   unknow
4  1958-10-28 00:00:00   58.423
5  1958-06-04 00:00:00  58.8227