Pandas中两列之间的时间差

3

如何计算两个列之间的时间差并将其转换为分钟?

         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

我想要通过计算 Time_delivered - Time_ordered 来得到配送所需的分钟数。
df.time_ordered = pd.to_datetime(df.time_ordered)


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

2
请以文本形式发布数据,而不是图片。如果是一张图片,没有人能够将其复制到 Python 中。此外,在您的图片中,您的列名为“Time Ordered”,但在您的代码中,您暗示它是“time_ordered”... - Dan
1
pd.to_datetime(df.["Date"] + df["Time Ordered"]) 会给你什么结果? - Dan
这个回答解决了您的问题吗? 计算Pandas DataFrame两列之间的时间差(以小时和分钟为单位) - Trenton McKinney
3个回答

5

将两个时间列转换为datetime格式,获取差值,通过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))

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接