如何从 2 列数据框中获取以秒为单位的持续时间

How to get Duration in seconds from 2 columns dataframe

我有一个数据框 df 如下:

车站 开始时间 结束时间
A123 2021 年 5 月 26 日 05:00:00 下午 2021 年 5 月 26 日 05:10:00
A456 2021 年 5 月 26 日 05:00:00 下午 2021 年 5 月 26 日 05:01:00

StartTime和EndTime的数据类型是字符串。 我想创建另一个持续时间为 StartTime 到 EndTime 的列。

车站 开始时间 结束时间 时长
A123 2021 年 5 月 26 日 05:00:00 下午 2021 年 5 月 26 日 05:10:00 下午 600
A456 2021 年 5 月 26 日 05:00:00 下午 2021 年 5 月 26 日 05:01:00 下午 60

使用:

df['StartTime']=pd.to_datetime(df['StartTime'].str.rsplit(n=1).str[0])
df['EndTime']=pd.to_datetime(df['EndTime'])
df['Duration']=df.eval("EndTime-StartTime").dt.total_seconds()

df的输出:

   Station  StartTime            EndTime               Duration
0    A123   2021-05-26 05:00:00 2021-05-26 05:10:00     600.0
1    A456   2021-05-26 05:00:00 2021-05-26 05:01:00      60.0

如果您想在 'StartTime' 中包含 'AM''PM',则:

df['StartTime']=pd.to_datetime(df['StartTime'])
df['EndTime']=pd.to_datetime(df['EndTime'])
df['Duration']=df.eval("EndTime-StartTime").dt.total_seconds()

df的输出:

   Station  StartTime             EndTime              Duration
0    A123   2021-05-26 17:00:00  2021-05-26 05:10:00  -42600.0
1    A456   2021-05-26 17:00:00  2021-05-26 05:01:00  -43140.0

注:如果需要正值则链abs()

如果您不想更改类似日期的列的初始格式:

df['Duration']=(pd.to_datetime(df['StartTime'].str.replace('PM|AM',''))-pd.to_datetime(df['EndTime'])).dt.total_seconds()
import pandas as pd
a_dataframe = pd.DataFrame({"Station": ["A1", "A2"], "ST": ["26-MAY-2021 05:00:00 PM", "26-MAY-2021 05:00:00 PM"], "ET":["26-MAY-2021 05:10:00. PM","26-MAY-2021 05:01:00 PM"]})

print(pd.to_datetime(a_dataframe['ET']) -pd.to_datetime(a_dataframe['ST']))
a_dataframe.insert(3, "Duration",pd.to_datetime(a_dataframe['ET']) -pd.to_datetime(a_dataframe['ST']))
print(a_dataframe)

这是你想要的吗?

import pandas as pd
data = [['A123','26-MAY-2021 05:00:00 PM','26-MAY-2021 05:10:00 PM'], ['A456','26-MAY-2021 05:00:00 PM','26-MAY-2021 05:01:00 PM']]
df = pd.DataFrame(data, columns=['Station','StartTime','EndTime'])
df['StartTime'] =pd.to_datetime(df['StartTime'])
df['EndTime'] =pd.to_datetime(df['EndTime'])
df['Duration'] = df['EndTime'] - df['StartTime']