Pandas DataFrame中的值的持续时间

时间:2017-06-23 06:09:26

标签: python pandas

我有以下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中已经存在一种方法,它正在做这个或类似的事情。

1 个答案:

答案 0 :(得分:5)

我认为您可以indexto_series创建DataFrame,差异按diff创建shift,最后获得dt.total_seconds

mul的最后多个布尔#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 ,最后得到sum

HttpWebRequest