Как я могу объединить три столбца в один столбец отметки времени в pandas - PullRequest
1 голос
/ 06 марта 2020

У меня есть кадр данных, похожий на этот

    Hour    Minute  Second  Value
0   14.0    57.0    17.0    0.0
1   14.0    57.0    18.0    0.0
2   14.0    57.0    19.0    138.6
3   14.0    57.0    20.0    138.6
4   14.0    57.0    21.0    138.6
5   14.0    57.0    22.0    138.6

Я хочу объединить столбцы часов / минут / секунд в индекс отметки времени. У меня есть свидание, которое я хочу использовать. Мне удалось сделать это, используя df.apply с datetime.datetime.combine(mydate, datetime.time(hour, min, sec)), но это слишком медленно.

Есть ли способ сделать это эффективно, используя встроенные функции pandas?

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Идея кратна Hour и Minutes, суммируйте и добавляйте строку datetime в to_datetime:

s = df['Hour'].mul(10000) + df['Minute'].mul(100) + df['Second']
df['date'] = pd.to_datetime('2015-01-01 ' + s.astype(str), format='%Y-%m-%d %H%M%S.%f')
print (df)
   Hour  Minute  Second  Value                date
0  14.0    57.0    17.0    0.0 2015-01-01 14:57:17
1  14.0    57.0    18.0    0.0 2015-01-01 14:57:18
2  14.0    57.0    19.0  138.6 2015-01-01 14:57:19
3  14.0    57.0    20.0  138.6 2015-01-01 14:57:20
4  14.0    57.0    21.0  138.6 2015-01-01 14:57:21
5  14.0    57.0    22.0  138.6 2015-01-01 14:57:22
0 голосов
/ 06 марта 2020

Другой вариант - умножить Hour и Minute на соответствующие числа, преобразовать сумму в timedelta и добавить к дате:

mydate = pd.to_datetime('2020-02-05')
df['timestamp'] = pd.to_timedelta(df.Hour*3600+df.Minute*60+df.Second, 
                                  unit='sec').add(mydate)

Вывод:

   Hour  Minute  Second  Value           timestamp
0  14.0    57.0    17.0    0.0 2020-02-05 14:57:17
1  14.0    57.0    18.0    0.0 2020-02-05 14:57:18
2  14.0    57.0    19.0  138.6 2020-02-05 14:57:19
3  14.0    57.0    20.0  138.6 2020-02-05 14:57:20
4  14.0    57.0    21.0  138.6 2020-02-05 14:57:21
5  14.0    57.0    22.0  138.6 2020-02-05 14:57:22

0   2020-02-05 14:57:17
1   2020-02-05 14:57:18
2   2020-02-05 14:57:19
3   2020-02-05 14:57:20
4   2020-02-05 14:57:21
5   2020-02-05 14:57:22
dtype: datetime64[ns]
...