【问题标题】:Timedelta calculation showing biggest ranges pandas显示最大范围熊猫的 Timedelta 计算
【发布时间】:2020-06-25 13:50:28
【问题描述】:

大家好,我需要计算 2 datetime64[ns] 之间的增量

然而,这给我带来了最大的增量,那是可见的虚幻。 我不理解为什么会发生此错误的原因,因为两个日期的格式相同。

df1=
              entrada      First_Time_log
0    2020-06-09 01:50:00 2020-06-09 03:13:22
1    2020-06-10 01:50:00 2020-06-10 02:31:31
2    2020-06-11 01:50:00 2020-06-11 02:00:07
3    2020-06-12 01:50:00 2020-06-12 03:39:59
4    2020-06-13 01:50:00 2020-06-13 04:05:28
...                  ...                 ...
4255 2020-06-02 01:50:00 2020-06-02 02:00:02
4256 2020-06-03 01:50:00 2020-06-03 02:09:16
4257 2020-06-04 01:50:00 2020-06-04 01:20:14
4258 2020-06-05 01:50:00 2020-06-05 01:11:39
4259 2020-06-06 01:50:00 2020-06-06 01:35:11 

但是经过下面的应用操作:

dfc['entrada-first'] = dfc['entrada'] -  dfc['First_Time_log']

它返回最大范围,因此 bitwenn 日期的范围小于 24 小时。 我做错了什么?

               entrada      First_Time_log     entrada-first
0    2020-06-09 01:50:00 2020-06-09 03:13:22 -1 days +22:36:38
1    2020-06-10 01:50:00 2020-06-10 02:31:31 -1 days +23:18:29
2    2020-06-11 01:50:00 2020-06-11 02:00:07 -1 days +23:49:53
3    2020-06-12 01:50:00 2020-06-12 03:39:59 -1 days +22:10:01
4    2020-06-13 01:50:00 2020-06-13 04:05:28 -1 days +21:44:32
...                  ...                 ...               ...
4255 2020-06-02 01:50:00 2020-06-02 02:00:02 -1 days +23:49:58
4256 2020-06-03 01:50:00 2020-06-03 02:09:16 -1 days +23:40:44
4257 2020-06-04 01:50:00 2020-06-04 01:20:14          00:29:46
4258 2020-06-05 01:50:00 2020-06-05 01:11:39          00:38:21
4259 2020-06-06 01:50:00 2020-06-06 01:35:11          00:14:49

【问题讨论】:

  • 尝试计算dfc['entrada-first'] = dfc['First_Time_log'] - dfc['entrada']
  • 对于在第一种模式下为正的值返回负数。
  • 你可以试试我更新的解决方案。

标签: python pandas date datetime


【解决方案1】:

您似乎想要 timedelta 的绝对值?例如

import pandas as pd
# example df:
df = pd.DataFrame({'entrada': pd.to_datetime(['2020-06-03 01:50:00','2020-06-04 01:50:00']),
                   'First_Time_log': pd.to_datetime(['2020-06-03 02:09:16','2020-06-04 01:20:14'])})
# Python's built-in abs works fine here:
df['td_abs'] = abs(df['entrada']-df['First_Time_log'])
# df['td_abs']
# 0   00:19:16
# 1   00:29:46
# Name: td_abs, dtype: timedelta64[ns]

【讨论】:

    【解决方案2】:

    尝试按如下方式计算时间差:

    def find_time_difference(x):
        if x["entrada"] >= x["First_Time_log"]:
            return x["entrada"] - x["First_Time_log"]
        elif x["entrada"] <= x["First_Time_log"]:
            return x["First_Time_log"] - x["entrada"]
        return ''
    df["entrada-first"] = df.apply(lambda x: find_time_difference(x), axis=1)
    

    输出:

    【讨论】:

    • 函数为什么这么复杂?你可以只取timedelta的绝对值
    • @MrFuppes,是的,这样会更好。
    猜你喜欢
    • 2019-11-09
    • 2016-05-05
    • 2022-12-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多