How to convert a datetime format to minutes - pandas
16,161
Solution 1
Use total_seconds
or seconds
and divide by 60
, last cast to integer
s:
#if necessary converting to timedelta
#df['usage_duration'] = pd.to_timedelta(df['usage_duration'])
df['new'] = df['usage_duration'].dt.total_seconds().div(60).astype(int)
Or:
df['new'] = (df['usage_duration'].dt.seconds.div(60).astype(int)
+ df['usage_duration'].dt.days.multiply(1440).astype(int) )
print (df)
processid userid usage_duration new
0 17613 root 0 days 23:41:03 1421
1 17641 root 2 days 04:05:26 3125
2 13848 acs 0 days 00:00:50 0
3 3912 acs 0 days 06:07:38 367
4 6156 acs 0 days 17:22:43 1042
Solution 2
This is one way:
s = pd.Series(['0 days 23:41:03.000000000', '2 days 04:05:26.000000000',
'0 days 00:00:50.000000000', '0 days 06:07:38.000000000',
'0 days 17:22:43.000000000'])
s = pd.to_timedelta(s).astype('timedelta64[m]').astype(int)
print(s)
0 1421
1 3125
2 0
3 367
4 1042
dtype: int32
Author by
Jithesh Erancheri
Updated on July 22, 2022Comments
-
Jithesh Erancheri almost 2 years
I have a data frame which has a column usage_duration (which is the difference of two another columns in datetime format). It looks like below:
processid, userid, usage_duration 17613,root,0 days 23:41:03.000000000 17641,root,2 days 04:05:26.000000000 13848,acs,0 days 00:00:50.000000000 3912,acs,0 days 06:07:38.000000000 6156,acs,0 days 17:22:43.000000000
Now I wanted to convert the same into minutes. It should look like as below:
processid, userid, usage_duration_min 17613,root,1421 17641,root,3125 13848,acs,0 3912,acs,367 6156,acs,1042
Can someone let me know how is it possible?
Highly appreciate your support
-
Jithesh Erancheri about 6 yearsThis suggestion works, but the 2 days are not converting. For example in the second row, it is only converting 04:05:26
-
Jithesh Erancheri about 6 yearsdf['new'] = df['usage_duration'].dt.seconds.div(60).astype(int)+df['usage_duration'].dt.days.multiply(1440).astype(int)
-
jezrael about 6 years@JitheshErancheri - Thank you, I change answer.