我正在计算马的年龄。所有的马都有相同的生日,不管它们出生的日期是什么——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
希望我回答了你的问题