【问题标题】:How to subtract seconds column from timedelta64 column in pandas?如何从熊猫中的 timedelta64 列中减去秒列?
【发布时间】:2021-10-22 23:12:45
【问题描述】:

我有很多列包含开始时间和偏移时间。我希望能够从整体设备延迟因子中减去这些列,以获得更正的偏移和起始时间。似乎有一种极端情况,导致答案采用以下格式:-1 天 +23:34:30.300000。

import pandas as pd
import numpy as np 
example=[["2","0 days 00:00:57.3","0 days 00:01:12.9","00:00:50.2","pos"],
 ["13","0 days 00:30:08.5","0 days 00:32:14.0", "00:20:28.0","neg"],
 ["6","0 days 00:27:18.7","0 days 00:01:24.2","0 days 00:26:48.4","pos"],
 ["7","0 days 00:01:56.676000","0 days 00:04:56.2","0 days 00:15:33.455000","pos"]]

example_table= pd.DataFrame(example,columns["ID","Start_Time","End_Time","Factor","tag"]) 
example_table.Factor=example_table.Factor.apply(pd.to_timedelta)

我的包含时间的列的格式为 timedelta64[ns]。

当我执行减法时,有时效果很好,但也有不正确的情况,见 ID 7:

example_table["x"]=(example_table["Start_Time"]-example_table["Factor"])

绝对值也不能解决问题。

example_table["absolute?"]=abs(example_table["Start_Time"]-example_table["Factor"])

如何创建具有正确时差的新列?

ID 2 和 13 的答案似乎是正确的,但 ID 7 的答案应该与显示的不同。

【问题讨论】:

  • isn't 0 days 00:00:30.300000 对于 id 6 是正确的
  • @Anurag Dabas 哎呀——我进行了编辑,在提交之前没有彻底检查。是的,6 是正确的,但 7 是错误的。当我有其他列时,取决于我使用的 -1 天显示或不正确的时差显示。
  • 0 days 00:27:30.300000 也适用于 id 7
  • @Anurag Dabas oof。好的,我一直在错误地看待这个。太感谢了。我在导致此问题的其他区域出错,并且显示难以阅读,所以我在我认为正确的地方犯了错误。
  • 是的,你得到了正确的值,因为它是这样显示的,但实际值不同,你可以通过 example_table.loc[3,'Factor']example_table.loc[3,'Start_Time'] 进行检查

标签: python pandas time timedelta seconds


【解决方案1】:

尝试改用diff

example_table["x"] = example_table[["Start_Time", "Factor"]].diff(axis=1)['Factor']

【讨论】:

  • 感谢您的回复,但我不确定如何使用它来控制我希望在 x 列中结束的内容。我想从 Factor 列中减去 Start_Time。我已经稍微编辑了这个问题,以表明代码仍然没有得到完全正确的答案。
  • U12-Forward 所以可能更接近但它给了我: KeyError: 'End_Time' ...
猜你喜欢
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 2015-07-02
  • 2019-02-05
  • 2018-03-07
  • 1970-01-01
相关资源
最近更新 更多