plot multiple strings from a dataframe
df['DateTime'] = df[['Year', 'Month', 'Day', 'Hour']].apply(lambda s : datetime.datetime(*s),axis = 1)


This might pop some error depending on the fact that that whether you have hour properly defined like it should be in between 0-23 , seconds in-between 0-59 etc...

Or try this

You can pass only the columns that you need to assemble.

In [33]: pd.to_datetime(df[['year', 'month', 'day']])
Out[33]: 
0   2015-02-04
1   2016-03-05
dtype: datetime64[ns


]

From the docs itself,

pd.to_datetime looks for standard designations of the datetime component in the column names, including:


required: year, month, day
optional: hour, minute, second, millisecond, microsecond, nanosecond


Also Another Approach is that Since it's probably a .csv file, you can do this at the time of reading/parsing the file itself, pandas is very intelligent and interesting!

This is done by passing in the column names as a list([year, month, day, time ]) to the parameter  parse_dates, or via  infer_datetime_format to True or by using a custom date_parser in the function pd.read_csv()>...

Hope this helps!