【问题标题】:How to get Duration in seconds from 2 columns dataframe如何从 2 列数据框中获取持续时间(以秒为单位)
【发布时间】:2021-10-16 18:13:44
【问题描述】:

我有一个数据框 df 如下:

Station StartTime EndTime
A123 26-MAY-2021 05:00:00 PM 26-MAY-2021 05:10:00
A456 26-MAY-2021 05:00:00 PM 26-MAY-2021 05:01:00

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

Station StartTime EndTime Duration
A123 26-MAY-2021 05:00:00 PM 26-MAY-2021 05:10:00 PM 600
A456 26-MAY-2021 05:00:00 PM 26-MAY-2021 05:01:00 PM 60

【问题讨论】:

    标签: python pandas datetime time


    【解决方案1】:

    使用:

    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()

    如果您不想更改 datelike 列的初始格式:

    df['Duration']=(pd.to_datetime(df['StartTime'].str.replace('PM|AM',''))-pd.to_datetime(df['EndTime'])).dt.total_seconds()
    

    【讨论】:

    • 你太快了!
    • 应该包括上午/下午
    • @MrFuppes 先生,但 Op 不想要上午和下午
    • 我不认为 OP 实际上提供了一个示例,您可以从中得出这个结论。无论如何,如果数据采用该格式,则忽略 AM/PM 会产生无效结果,所以我建议一个不这样做的解决方案 ;-)
    【解决方案2】:
    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)
    

    【讨论】:

      【解决方案3】:

      这是你的想法吗?

      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']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-13
        • 1970-01-01
        • 2019-01-13
        • 1970-01-01
        • 2015-03-10
        • 2021-12-27
        • 1970-01-01
        相关资源
        最近更新 更多