0
df['time2'] = pd.to_datetime( df['time'], format = "%H:%M:%S", errors="coerce") #create datetime
df['timestart'] = df.iloc[[0]]['time2'] #create start time
df['timediff'] = ( df['time2'] - df['timestart']) #substract start_time from current time

But all I get is

Name: time2, dtype: datetime64[ns]

time time2 timestart timediff
09:00:00 1900-01-01 09:00:00 1900-01-01 09:00:00 0 days
10:10:00 1900-01-01 10:10:00 1900-01-01 09:00:00 0 days
11:08:00 1900-01-01 11:08:00 1900-01-01 09:00:00 0 days
12:12:00 1900-01-01 12:12:00 1900-01-01 09:00:00 0 days

"0 days" isn't what I expect. I need

00:00:00
01:10:00
02:08:00
etc.
FObersteiner
  • 22,500
  • 8
  • 42
  • 72
  • take the `.dt.total_seconds()` and format those to a string as `HH:MM:SS`? see [Format timedelta to string](https://stackoverflow.com/q/538666/10197418). – FObersteiner Jun 25 '21 at 10:19
  • btw. you can do directly `df['timediff'] = df['time2'] - df.iloc[[0]]['time2']` – FObersteiner Jun 25 '21 at 10:20

1 Answers1

0
df = pd.DataFrame(np.array(["09:00:00","10:10:00","11:08:00","12:12:00","13:09:00","14:09:00","15:09:00","16:01:00","16:46:00"]),columns=['time'])
df['time2'] = pd.to_datetime( df['time'], format = "%H:%M:%S", errors="coerce")
starttime = df['time2'].iloc[0]
df['timediff'] = (df['time2'] - starttime )

If you want total seconds then you can use:

df['timediff']=df['timediff'].dt.total_seconds()

If you needed only time part then(you don't care about days):

df['timediff']=pd.to_datetime(df['timediff'].dt.total_seconds(),unit='s').dt.time

output of df:

     time       time2                   timestart               timediff
0   09:00:00    1900-01-01 09:00:00     1900-01-01 09:00:00     0 days 00:00:00
1   10:10:00    1900-01-01 10:10:00     1900-01-01 09:00:00     0 days 01:10:00
2   11:08:00    1900-01-01 11:08:00     1900-01-01 09:00:00     0 days 02:08:00
3   12:12:00    1900-01-01 12:12:00     1900-01-01 09:00:00     0 days 03:12:00
Anurag Dabas
  • 23,866
  • 9
  • 21
  • 41