我有以下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中已经存在一种方法,它正在做这个或类似的事情。
答案 0 :(得分:5)
我认为您可以index
从to_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