微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 使用Pandas使用过滤器计算值之间的差异

我有一个数据框,每行包含有关事件的信息以及事件是否成功.我想计算非成功事件之间的差值,我知道如何计算字段之间的差异,但不是在使用过滤器时.

我的数据框架具有以下结构:

      Timestamp     Status          
   0 2012-01-01     OK 
   1 2012-01-02     OK 
   2 2012-01-03     FAIL
   3 2012-01-05     OK 
   4 2012-01-06     OK 
   5 2012-01-07     FAIL

我想要的是计算每一行的时间,直到下一次失败,所以像这样的somtethin:

      Timestamp     Status     Days_until_next_fail              
   0 2012-01-01     OK         2
   1 2012-01-02     OK         1
   2 2012-01-03     FAIL       0
   3 2012-01-05     OK         2
   4 2012-01-06     OK         1
   5 2012-01-07     FAIL       0

我试过这个:

df['days_until_next_failure'] = df.Timestamp - df[(df.Status == '1')].Timestamp(+1)

但是返回NaT,我在文档中找不到任何应用过滤和使用shift的东西.一种选择是从结尾开始迭代数据帧,但这似乎有点低效.

解决方法:

以下给出了自上次失败以来的日子,而不是下一天的日子:

is_fail = (df.Status != 'OK')
cumulative_fails = is_fail.cumsum()
fail_idx, = is_fail.nonzero()
days_since_last_fail = arange(len(is_fail))
days_since_last_fail[fail_idx[0]:] -= fail_idx[cumulative_fails[fail_idx[0]:]-1]

如果你想要正确的版本,那么你可以自己调整它,或者可能只是在开始和结束时反转原始数组.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐