9

Supposely I have dataframes as below:

Year Month Day
2003 1     8
2003 2     7

How to combine the Year, Month, and Day in the newly defined column in the dataframe as such the dataframe would be:

Year Month Day Date
2003 1     8   2003-1-8
2003 2     7   2003-2-7

Any idea on this?

I am using pandas python dataframe

Thanks!

2 Answers 2

17
>>> from datetime import datetime
>>> df['Date'] = df.apply(lambda row: datetime(
                              row['Year'], row['Month'], row['Day']), axis=1)
>>> df
   Year  Month  Day                Date
0  2003      1    8 2003-01-08 00:00:00
1  2003      2    7 2003-02-07 00:00:00

Update 2020-03-12: The answer from sacul is better and faster:

%%timeit
df.apply(lambda row: datetime(
                              row['Year'], row['Month'], row['Day']), axis=1)

2.53 s ± 169 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

# use below, above is slow!!!
%%timeit
pd.to_datetime(df[['Year','Month','Day']])

14.4 ms ± 3.37 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks! It's working. This is my first time using pandas. Your answer really cool!
please see answer by @sacuL below. That is better and faster. I have also updated this answer to reflect that.
2

Better use pd.to_datetime:

df['Date'] = pd.to_datetime(df[['Year','Month','Day']])
>>> df
   Year  Month  Day       Date
0  2003      1    8 2003-01-08
1  2003      2    7 2003-02-07

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.