根据三个日期计算年龄



我正在计算马的年龄。所有的马都有相同的生日,不管它们出生的日期是什么——8月1日。例如,如果一匹马出生在7月31日,尽管它只出生了一天,但它仍然被归类为1岁。

我有一个包含三列的数据框:FoalDate(马出生的日期)、MeetingDate(比赛的日期)和Age。我在试着计算赛马在某一天的年龄。在下面的例子中,这匹马是2岁的,因为8月1日从它的出生日期起只过了两次。

的例子:

Foal Date     MeetingDate   Age
20/11/2014    30/04/2017    2

我正试图编写代码,将"年龄"列(目前填充0)替换为正确的答案。

示例

data = {'Foal Date': {0: '20/11/2014', 1: '31/07/2015', 2: '31/07/2015', 3: '31/08/2015'},
'MeetingDate': {0: '30/04/2017', 1: '30/04/2017', 2: '01/08/2017', 3: '01/11/2015'}}
df = pd.DataFrame(data)

df

Foal Date   MeetingDate
0   20/11/2014  30/04/2017
1   31/07/2015  30/04/2017
2   31/07/2015  01/08/2017
3   31/08/2015  01/11/2015
代码

# make dtype to datetime
df1 = df.apply(pd.to_datetime, format='%d/%m/%Y')
s1 = df1['Foal Date'].dt.month < 8
s2 = df1['MeetingDate'].dt.month >= 8
s_age = df1['MeetingDate'].dt.year.sub(df1['Foal Date'].dt.year).sub(1).add(s1).add(s2)

s_age

0    2
1    2
2    3
3    0
dtype: int64

make s_age to age column

df.assign(Age=s_age)

结果:

Foal Date   MeetingDate Age
0   2014-11-20  2017-04-30  2
1   2015-07-31  2017-04-30  2
2   2015-07-31  2017-08-01  3
3   2015-08-31  2015-11-01  0

使用python时可以使用datetime

最初从马驹日期中获取年份然后为出生日期创建另一个datetime对象用那个特定的年份。为了提高效率,我们可以考虑一个if else语句来检查月份>= august,以决定是考虑当年还是上一年。

然后通过找出出生日期andMeet Date年龄可以用天来表示。

import datetime;
foalDate = datetime.datetime(2014,3,20)
foalMonth = foalDate.month
if foalMonth >= 8:
foalYear = foalDate.year 
else:
foalYear = foalDate.year - 1
birthDate = datetime.datetime(foalYear,8,1)
print(f'birthDate : {birthDate}')
meetDate = datetime.datetime(2017,4,30)
print(f'meetDate : {meetDate}')
age = meetDate - birthDate
print(f'Age is {(age.days)//365}')

您可以运行并检查代码:https://www.online-python.com/GfIezdmbNr

希望我回答了你的问题

最新更新