【问题标题】:How to subtract only the time (excluding date) in 2 Pandas columns?如何仅减去 2 个 Pandas 列中的时间(不包括日期)?
【发布时间】:2020-03-02 21:02:28
【问题描述】:

很难找到这方面的信息。我每天都会跟踪几次完成时间,以根据目标完成时间来衡量它们。

我正在将完成日期和时间读入 pandas 数据框中,并使用 df.map 映射完成时间字典以在数据框中创建“目标时间”列。

样本数据:

Date                  Process
1/2/2020 10:20:00 AM  Test 1
1/2/2020 10:25:00 AM  Test 2
1/3/2020 10:15:00 AM  Test 1
1/3/2020 10:00:00 AM  Test 2

使用 df.map() 创建包含目标时间的列:

goalmap={
    'Test 1':dt.datetime.strptime('10:15', '%H:%M'),
    'Test 2':dt.datetime.strptime('10:30', '%H:%M')}
df['Goal Time']=df['Process'].map(goalmap)

然后我尝试创建一个新的“Delta”列,以分钟为单位计算两者之间的时间差。我遇到的大多数问题都与数据类型有关。我通过使用 pd.to_datetime 转换第一列(日期)来计算时间差,但因为我的“目标时间”列不存储日期,它计算出一个巨大的增量(回到 1900 年)。我也尝试从日期时间列中解析时间,但无济于事。

仅计算时间戳之间差异的任何最佳方法?

【问题讨论】:

  • Goal Time 是每个进程的时间量还是结束时间戳
  • @QuangHoang 目标时间应该是每天要完成的目标时间。例如 - 每天测试 1 应该在上午 10:15 之前完成。我试图捕捉到我们错过了多少/达到了目标时间。

标签: python pandas datetime


【解决方案1】:

我推荐timedelta 而不是datetime

goalmap={
    'Test 1': pd.to_timedelta('10:15:00'),
    'Test 2': pd.to_timedelta('10:30:00') }
df['Goal Time']=df['Process'].map(goalmap)

df['Goal_Timestamp'] = df['Date'].dt.normalize() + df['Goal Time']

df['Meet_Goal'] = df['Date'] <= df['Goal_Timestamp']

输出:

                 Date Process Goal Time      Goal_Timestamp  Meet_Goal
0 2020-01-02 10:20:00  Test 1  10:15:00 2020-01-02 10:15:00      False
1 2020-01-02 10:25:00  Test 2  10:30:00 2020-01-02 10:30:00       True
2 2020-01-03 10:15:00  Test 1  10:15:00 2020-01-03 10:15:00       True
3 2020-01-03 10:00:00  Test 2  10:30:00 2020-01-03 10:30:00       True

【讨论】:

  • 我喜欢只在另一列中添加日期的方法。似乎这可能是唯一的方法。
猜你喜欢
  • 2022-07-07
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2023-04-11
  • 2021-08-23
  • 2020-03-26
  • 1970-01-01
相关资源
最近更新 更多