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

python – Pandas DataFrame中的值的持续时间

我有以下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.

最后一个多布尔DataFrame到mul,最后得到sum

#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] 举报,一经查实,本站将立刻删除。

相关推荐