我有以下數據框:大熊貓測量經過時間條件爲真時
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
我想總結逝去的時候binary
是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
有沒有更好的方式來做到這一點?我猜這個代碼是高性能的,我的擔心是可讀性。