2 回答
TA贡献1848条经验 获得超10个赞
使用以下代码:
result = myDF.groupby((myDF.ID != myDF.ID.shift()).cumsum()).agg(
ID=('ID', 'first'), start=('seconds', 'first'), end=('seconds', 'last'))\
.query('ID == 1').drop(columns='ID').reset_index(drop=True)
对于您的数据样本,结果是:
start end
0 4 7
1 12 15
TA贡献1872条经验 获得超3个赞
import pandas as pd
from itertools import groupby
myDF = pd.DataFrame({'ID': [0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1], 'seconds': (np.arange(16))})
tmp, m = [], myDF['ID'] == 1
for v, g in groupby(zip(m.index, m), lambda k: k[1]):
if v:
g = list(g)
tmp.append((g[0][0], g[-1][0]))
df = pd.DataFrame(tmp, columns=['start', 'end'])
print(df)
印刷:
start end
0 4 7
1 12 15
添加回答
举报