I以下のデータフレーム持っている:私はbinary
がTrue
ときの経過時間を合計したいパンダの尺度は、経過時間を
dt binary
2016-01-01 00:00:00 False
2016-01-01 00:00:01 False
2016-01-01 00:00:02 False
2016-01-01 00:00:03 False
2016-01-01 00:00:04 True
2016-01-01 00:00:05 True
2016-01-01 00:00:06 True
2016-01-01 00:00:07 False
2016-01-01 00:00:08 False
2016-01-01 00:00:09 True
2016-01-01 00:00:10 True
を。私はそれを実装する私のソリューションを共有していますが、それは時系列データのかなり基本的な機能であるため、より簡単な方法があるはずです。データはおそらく等距離ですが、私はそれに頼ることはできません。
df['binary_grp'] = (df.binary.diff(1) != False).astype(int).cumsum()
# Throw away False values
df = df[df.binary]
groupby = df.groupby('binary_grp')
df = pd.DataFrame({'timespan': groupby.dt.last() - groupby.dt.first()})
return df.timespan.sum().seconds/60.0
最も恐ろしい部分はおそらく最初の行です。それは基本的に、連続する各ブロックに増分された数を割り当てます。それ以降のデータの表示方法は次のとおりです。
dt binary binary_grp
2016-01-01 00:00:00 False 1
2016-01-01 00:00:01 False 1
2016-01-01 00:00:02 False 1
2016-01-01 00:00:03 False 1
2016-01-01 00:00:04 True 2
2016-01-01 00:00:05 True 2
2016-01-01 00:00:06 True 2
2016-01-01 00:00:07 False 3
2016-01-01 00:00:08 False 3
2016-01-01 00:00:09 True 4
2016-01-01 00:00:10 True 4
これを行うには良い方法がありますか?私はこのコードが実行可能だと思う、私の心配は読みやすさです。