Вы можете создать новый столбец, заполненный датами, а затем получить первое значение в днях с GroupBy.transform
для вычитания с датами, последним преобразованием времени в делах на Series.dt.total_seconds
, а затем в минуты :
df = pd.DataFrame({
'date':['10/3/2018'] * 5 + ['10/4/2018'],
'time':['6:00:00','7:00:00','8:00:00','9:00:00','10:00:00','6:00:00'],
'col':[4,8,9,4,2,3],
})
df['datetime'] = pd.to_datetime(df['date'] + df['time'], format='%d/%m/%Y%H:%M:%S')
first = df.groupby('date')['datetime'].transform('first')
df['new'] = df['datetime'].sub(first).dt.total_seconds().div(60).astype(int)
print (df)
date time col datetime new
0 10/3/2018 6:00:00 4 2018-03-10 06:00:00 0
1 10/3/2018 7:00:00 8 2018-03-10 07:00:00 60
2 10/3/2018 8:00:00 9 2018-03-10 08:00:00 120
3 10/3/2018 9:00:00 4 2018-03-10 09:00:00 180
4 10/3/2018 10:00:00 2 2018-03-10 10:00:00 240
5 10/4/2018 6:00:00 3 2018-04-10 06:00:00 0
Detail :
print (first)
0 2018-03-10 06:00:00
1 2018-03-10 06:00:00
2 2018-03-10 06:00:00
3 2018-03-10 06:00:00
4 2018-03-10 06:00:00
5 2018-04-10 06:00:00
Name: datetime, dtype: datetime64[ns]