Combine la columna de fecha y la columna de tiempo en la columna de fecha y hora

Tengo un dataframe de Pandas como este; (obtenido al analizar un archivo de Excel)

| | COMPANY NAME | MEETING DATE | MEETING TIME| -----------------------------------------------------------------------| |YKSGR| YAPI KREDİ SİGORTA A.Ş. | 2013-12-16 00:00:00 |14:00:00 | |TRCAS| TURCAS PETROL A.Ş. | 2013-12-12 00:00:00 |13:30:00 | 

La columna MEETING DATE es una marca de tiempo con una representación como Timestamp('2013-12-20 00:00:00', tz=None) y MEETING TIME es un objeto datetime.time con una representación como datetime.time(14, 0)

Quiero combinar la MEETING DATE MEETING TIME y el MEETING TIME MEETING DATE MEETING TIME en una columna. datetime.combine parece hacer lo que quiero, sin embargo, necesito aplicar esta función de manera inteligente. ¿Cómo puedo conseguir esto?

Puedes usar el método de aplicación, y aplicar la combinación de esta manera:

 >>> df.apply(lambda x: combine(x['MEETING DATE'], x['MEETING TIME']), axis=1) 0 2013-12-16 14:00:00 1 2013-12-12 13:00:00 

Otras soluciones no me funcionaron, así que se me ocurrió una solución alternativa utilizando replace lugar de combine :

 def combine_date_time(df, datecol, timecol): return df.apply(lambda row: row[datecol].replace( hour=row[timecol].hour, minute=row[timecol].minute), axis=1 ) 

En tu caso:

 combine_date_time(df, 'MEETING DATE', 'MEETING TIME') 

Se siente lento (no lo he cronometrado correctamente), pero funciona .

ACTUALIZACIÓN : He cronometrado ambos enfoques para un conjunto de datos relativamente grande (> 500,000 filas), y ambos tienen tiempos de ejecución similares, pero el uso de la combine es más rápido (59 segundos para replace frente a 50 para la combine ). También, vea la respuesta de jezrael en esto.

ACTUALIZACIÓN2 : He intentado el enfoque de jezrael :

 def combine_date_time(df, datecol, timecol): return pd.to_datetime(df[datecol].dt.date.astype(str) + ' ' + df[timecol].astype(str)) 

Este enfoque es muy rápido en comparación, jezrael tiene razón. Sin embargo, no he podido medirlo, pero es evidente.

Puede convertir Time columna de Time primero en string y luego en to_timedelta , luego es fácil sumr ambas columnas:

 print (type(df['MEETING DATE'].iat[0]))  print (type(df['MEETING TIME'].iat[0]))  print (df['MEETING DATE'] + pd.to_timedelta(df['MEETING TIME'].astype(str))) YKSGR 2013-12-16 14:00:00 TRCAS 2013-12-12 13:30:00 dtype: datetime64[ns]