熊猫在两列之间的时差

时间:2019-12-05 10:30:18

标签: pandas numpy dataframe

如何减去两列之间的时间并将其转换为分钟

         Date Time Ordered Time Delivered
0  1/11/19   9:25:00 am    10:58:00 am
1  1/11/19  10:16:00 am    11:13:00 am
2  1/11/19  10:25:00 am    10:45:00 am
3  1/11/19  10:45:00 am    11:12:00 am
4  1/11/19  11:11:00 am    11:47:00 am

我想减去已交付的时间-已订购的时间,以获取交付所需的时间。

df.time_ordered = pd.to_datetime(df.time_ordered)

这不会输出正确的时间,而是将今天的日期添加到时间

3 个答案:

答案 0 :(得分:4)

将两个时间列都转换为日期时间,求差,用Series.dt.total_seconds转换为秒,然后除以60除以分钟:

df['diff'] = (pd.to_datetime(df.time_ordered, format='%I:%M:%S %p')
                .sub(pd.to_datetime(df.time_delivered, format='%I:%M:%S %p'))
                .dt.total_seconds()
                .div(60))

答案 1 :(得分:0)

尝试to_datetime()

df = pd.DataFrame([['9:25:00 AM','10:58:00 AM']],
                  columns=['time1', 'time2'])

print(pd.to_datetime(df.time2)-pd.to_datetime(df.time1))

输出:

01:33:00

答案 2 :(得分:0)

另一种方法是使用np.timedelta64

print(df)
     Date Time Ordered Time Delivered
0  1/11/19   9:25:00 am    10:58:00 am
1  1/11/19  10:16:00 am    11:13:00 am
2  1/11/19  10:25:00 am    10:45:00 am
3  1/11/19  10:45:00 am    11:12:00 am
4  1/11/19  11:11:00 am    11:47:00 am

   df['mins'] =  (
    pd.to_datetime(df["Date"] + " " + df["Time Delivered"])
    - pd.to_datetime(df["Date"] + " " + df["Time Ordered"])
) / np.timedelta64(1, "m")
输出:
print(df)
   Date     Time Ordered   Time Delivered mins
0  1/11/19   9:25:00 am    10:58:00 am  93.0
1  1/11/19  10:16:00 am    11:13:00 am  57.0
2  1/11/19  10:25:00 am    10:45:00 am  20.0
3  1/11/19  10:45:00 am    11:12:00 am  27.0
4  1/11/19  11:11:00 am    11:47:00 am  36.0