Расчет возраста по данным (dob -y / m / d) - PullRequest
2 голосов
/ 13 января 2020

Я пытаюсь добавить столбец "Возраст" к моим данным

number of purchased hours(mins) dob Y   dob M   dob D
0   7200    2010.0  10.0    12.0
1   7320    2010.0  6.0 2.0
2   5400    2011.0  6.0 18.0
3   9180    2009.0  10.0    18.0
4   3102    2007.0  7.0 30.0
5   5400    2011.0  4.0 6.0
6   9000    2009.0  8.0 5.0
7   6000    2004.0  2.0 7.0
8   6000    2007.0  8.0 17.0
9   6000    2013.0  5.0 5.0
10  12000   2012.0  9.0 27.0
11  12000   2004.0  11.0    25.0
12  6000    2009.0  11.0    20.0

Я пробовал этот код, но не уверен, что пошло не так

from datetime import datetime as dt
df['Age'] = datetime.datetime.now()-pd.to_datetime(df[['dob D','dob M','dob Y']])

Ниже ошибка, которая высветилась

ValueError: to assemble mappings requires at least that [year, month, day] be specified: [day,month,year] is missing

1 Ответ

0 голосов
/ 13 января 2020

Если хотите использовать to_datetime с 3 столбцами, он работает только с переименованными именами столбцов:

d = {'dob Y':'year', 'dob M':'month', 'dob D':'day'}
df['Age'] = (pd.Timestamp.now().floor('d') - 
               pd.to_datetime(df[['dob D','dob M','dob Y']].rename(columns=d)))

print (df)
    number of purchased hours(mins)   dob Y  dob M  dob D       Age
0                              7200  2010.0   10.0   12.0 3380 days
1                              7320  2010.0    6.0    2.0 3512 days
2                              5400  2011.0    6.0   18.0 3131 days
3                              9180  2009.0   10.0   18.0 3739 days
4                              3102  2007.0    7.0   30.0 4550 days
5                              5400  2011.0    4.0    6.0 3204 days
6                              9000  2009.0    8.0    5.0 3813 days
7                              6000  2004.0    2.0    7.0 5819 days
8                              6000  2007.0    8.0   17.0 4532 days
9                              6000  2013.0    5.0    5.0 2444 days
10                            12000  2012.0    9.0   27.0 2664 days
11                            12000  2004.0   11.0   25.0 5527 days
12                             6000  2009.0   11.0   20.0 3706 days

Если хотите преобразовать временные интервалы в дни:

d = {'dob Y':'year', 'dob M':'month', 'dob D':'day'}
df['Age'] = ((pd.Timestamp.now().floor('d') - 
               pd.to_datetime(df[['dob D','dob M','dob Y']].rename(columns=d)))
               .dt.days)

print (df)
    number of purchased hours(mins)   dob Y  dob M  dob D   Age
0                              7200  2010.0   10.0   12.0  3380
1                              7320  2010.0    6.0    2.0  3512
2                              5400  2011.0    6.0   18.0  3131
3                              9180  2009.0   10.0   18.0  3739
4                              3102  2007.0    7.0   30.0  4550
5                              5400  2011.0    4.0    6.0  3204
6                              9000  2009.0    8.0    5.0  3813
7                              6000  2004.0    2.0    7.0  5819
8                              6000  2007.0    8.0   17.0  4532
9                              6000  2013.0    5.0    5.0  2444
10                            12000  2012.0    9.0   27.0  2664
11                            12000  2004.0   11.0   25.0  5527
12                             6000  2009.0   11.0   20.0  3706
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...