我有以下DataFrame:
f_1 f_2 f_3
00:00:00 False False False
00:05:22 True False False
00:06:40 True False False
00:06:41 False False False
00:06:42 False False False
00:06:43 False False False
00:06:44 False False False
00:06:46 False False False
00:06:58 False False False
我想计算一个系列是真的总持续时间.在这个例子中,唯一成为True一段时间的系列是f_1.目前,我使用以下代码:
result = pandas.timedelta(0)
for _, series in falsePositives.iteritems():
prevIoUsTime = None
prevIoUsValue = None
for currentTime, currentValue in series.iteritems():
if prevIoUsValue:
result += (currentTime - prevIoUsTime)
prevIoUsTime = currentTime
prevIoUsValue = currentValue
print result.total_seconds()
有更好的解决方案吗?我估计在Pandas中已经存在一种方法,它正在做这个或类似的事情.
解决方法:
我认为您可以在to_series
之间创建系列,从diff
开始,在shift
之间移动,最后获得dt.total_seconds
.
#if necessary convert index to timedelta
df.index = pd.to_timedelta(df.index)
s = df.index.to_series().diff().shift(-1).dt.total_seconds()
df1 = df.mul(s, 0)
print (df1)
f_1 f_2 f_3
00:00:00 0.0 0.0 0.0
00:05:22 78.0 0.0 0.0
00:06:40 1.0 0.0 0.0
00:06:41 0.0 0.0 0.0
00:06:42 0.0 0.0 0.0
00:06:43 0.0 0.0 0.0
00:06:44 0.0 0.0 0.0
00:06:46 0.0 0.0 0.0
00:06:58 NaN NaN NaN
print (df1.sum())
f_1 79.0
f_2 0.0
f_3 0.0
dtype: float64
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。