0

The following dataframe "Roadtrip" relates to car travel times between point A and point B. Using Pandas dataframes, how does one calculate a new column "TravelTime" to capture the number of minutes it takes to drive from point A to point B (i.e. assuming the entries for "Leave" and "Arrive" are strings)?

Output:

      Leave     Arrive  TravelTime(in minutes) 
   0  18:26     21:16   ????
   1  12:18     14:19   ????
   2  06:23     13:02   ????
   3  15:52     03:14   ????
beluga217
  • 41
  • 1
  • 4
  • perhaps this may help https://stackoverflow.com/questions/22923775/calculate-pandas-dataframe-time-difference-between-two-columns-in-hours-and-minu – smoggers Apr 01 '18 at 19:31

2 Answers2

0

Since you only provide time data, I assuming the leave time is less late arrive time is for next day arrive

df1=df.apply(pd.to_datetime)
df['New']=np.where((df1.Arrive-df1.Leave).dt.total_seconds()//60<0,((df1.Arrive+pd.Timedelta(1,unit='d'))-df1.Leave).dt.total_seconds()//60,(df1.Arrive-df1.Leave).dt.total_seconds()//60)
df
Out[1491]: 
   Leave Arrive    New
0  18:26  21:16  170.0
1  12:18  14:19  121.0
2  06:23  13:02  399.0
3  15:52  03:14  682.0
BENY
  • 317,841
  • 20
  • 164
  • 234
0

I believe need:

#convert both columns to timedeltas
a = pd.to_timedelta(df['Arrive'] + ':00')
b =  pd.to_timedelta(df['Leave'] + ':00')
#one day timedelta
oneday = np.array([1], dtype='timedelta64[D]')
#zero timedelta
zero =  np.array(0, dtype='timedelta64[D]')
#compare if difference is negative
mask = (a - b) > zero
#by condition get difference, add one day if next day, last convert to minutes
df['TravelTime'] = ((np.where(mask, a - b, a + oneday - b) /
                     np.timedelta64(1, 'm')).astype(int))
print (df)
   Leave Arrive  TravelTime
0  18:26  21:16         170
1  12:18  14:19         121
2  06:23  13:02         399
3  15:52  03:14         682
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252