У меня есть фрейм данных со столбцами from
и to
времени какого-либо события.
import pandas as pd
import numpy as np
data = [
[np.datetime64('2019-06-25T03:30'), np.datetime64('2019-06-25T05:30')],
[np.datetime64('2019-06-25T22:30'),np.datetime64('2019-06-26T04:30')],
]
df = pd.DataFrame(data, columns = ['from', 'to'])
, который выглядит следующим образом
from to
0 2019-06-25 03:30:00 2019-06-25 05:30:00
1 2019-06-25 22:30:00 2019-06-26 04:30:00
Обратите внимание, как вторая строка пересекает деньграница.Я хотел бы разделить эту строку на две части с to
и from
, установленными в полночь
Ожидаемый результат:
from to
0 2019-06-25 03:30:00 2019-06-25 05:30:00
1 2019-06-25 22:30:00 2019-06-26 00:00:00
2 2019-06-26 00:00:00 2019-06-26 04:30:00
Я думал о применении функции, которая выполняетsplit, но это не похоже на работу.
def split_days(row):
# if it's the same day, do not split
if row['from'].date == row['to'].date :
return row
# if different days, make two rows
# first day until mignight and second day from midnight onwards
else:
row2 = row.copy(deep=True)
row['to']=row['to'].replace(hour=0, minute=0, second=0, microsecond=0)
row2['from']=row2['to'].replace(hour=0, minute=0, second=0, microsecond=0)
return pd.concat([row, row2], axis=1).T # <= this is certainly incorrect
df.apply(split_days, axis=1)
Как применить функцию к каждой строке DF и заменить ее несколькими новыми строками?