【问题标题】:Calculate timedelta with loc?用 loc 计算 timedelta?
【发布时间】:2020-07-24 10:05:05
【问题描述】:

我有一点问题应该很容易。我的 df 如下所示:

Index                 ZeitstempelSBA        Status1 counting
2018-01-02 12:20:00                         SR_OPEN    56
2018-01-02 12:21:00                         SR_OPEN    57
2018-01-02 12:22:00                         SR_OPEN    58
2018-01-02 12:23:00                         SR_OPEN    59
2018-01-02 12:24:00                         SR_OPEN    60
2018-01-02 12:25:00   2018-01-02 12:25:05   SR_CLEAR   0
2018-01-02 12:26:00                         SR_CLEAR   1
2018-01-02 12:27:00   2018-01-02 12:27:13   SR_CLOSE   0
2018-01-02 12:28:00                         SR_CLOSE   1
2018-01-02 12:29:00                         SR_CLOSE   2
2018-01-02 12:30:00                         SR_OPEN    0
2018-01-02 12:31:00                         SR_OPEN    1
2018-01-02 12:32:00                         SR_OPEN    2
2018-01-02 12:33:00                         SR_OPEN    3
2018-01-02 12:34:00                         SR_OPEN    4
2018-01-02 12:35:00   2018-01-02 12:35:11   SR_CLEAR   0
2018-01-02 12:36:00                         SR_CLEAR   1
2018-01-02 12:37:00   2018-01-02 12:37:17   SR_CLOSE   0
2018-01-02 12:38:00                         SR_CLOSE   1
2018-01-02 12:39:00                         SR_CLOSE   2

我正在尝试计算整个数据帧中第一个 CLEAR 和第一个 CLOSE 间隔之间的时间差。我尝试使用,但它没有给我预期的结果:

begin = df.loc[(df.Status1 == 'SR_CLEAR')&(df.counting == 0),'ZeitstempelSBA']
end = df.loc[(df.Status1 == 'SR_CLOSE')&(df.counting == 0),'ZeitstempelSBA'] 
end-begin

输出应该是每个 SR_CLEAR(计数 == 0)和 SR_CLOSE(计数 == 0)情况之间的时间增量的数组/列表。

【问题讨论】:

  • 您的问题很简单,您的数据框中没有SR-CLEARSR_CLOSE,因此您的布尔值永远不会等于true。
  • 另外,df['counting'] 在示例中从不等于 0,这是故意的吗?
  • 对不起,没有。这不是故意的。我改了....

标签: python pandas datetime


【解决方案1】:

您可以使用 groupby.min.to_dict() 而不是 .loc

s = df[df['counting'].eq(0)].groupby("Status1")["ZeitstempelSBA"].min().to_dict()


print(s)

{'CLEAR': Timestamp('2018-01-02 12:25:05'),
 'CLOSE': Timestamp('2018-01-02 12:27:13')}

s['CLOSE'] - s['CLEAR'] 
Timedelta('0 days 00:02:08')

【讨论】:

  • 谢谢!它只适用于一种情况。但是,该结构在数据框中重复。我添加了一些行以进行澄清。我需要每个 CLEAR 和 CLOSE 情况之间的时间差异.....
  • @N.Foe 你能添加你想要的输出吗?我编辑了输出以包含计数逻辑。
  • 我现在做到了。逻辑仍然只给出第一种情况之间的时间差......?!
  • @N.Foe 我不明白 - 你只有每个值都有一个值,因为你是按0 过滤的,请参阅How to Askminimal reproducible example
猜你喜欢
  • 2018-11-23
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多