使用python3.6和Pandas 0.19.2
我有这样一个数据帧:tid datetime event data
0 0 2017-03-22 10:59:59.864 START NaN
1 0 2017-03-22 10:59:59.931 END NaN
2 0 2017-03-22 10:59:59.935 START NaN
3 1 2017-03-22 10:59:59.939 END NaN
4 0 2017-03-22 10:59:59.940 END NaN
5 1 2017-03-22 10:59:59.941 START NaN
6 1 2017-03-22 10:59:59.945 END NaN
7 0 2017-03-22 10:59:59.947 START NaN
8 1 2017-03-22 10:59:59.955 START NaN
它包含线程内部发生的事务的开始日期和结束日期(tid是线程id)。遗憾的是,事务本身没有唯一的ID,因此我需要按tid对这些行进行分组,按日期排序,然后将行2乘2,这样每个事务都有1个开始和1个结束。在
我当前的问题是,我的初始数据帧可能会错过每个线程的第一个开始事件(在上面的示例中,索引为3的行是一个没有前一个开始的结束事件)。我需要把那些结束线去掉,但我不知道怎么做。
最后一个没有匹配的结束行的开始行也有相同的问题。在
样本输入
^{pr2}$
预期输出
相同的数据帧,但删除了#2行,因为它是Tid 1的第一行,不是开始事件:tid datetime event
0 0 2017-03-22 10:59:59.864 START
1 0 2017-03-22 10:59:59.931 END
3 1 2017-03-22 10:59:59.933 START
4 1 2017-03-22 10:59:59.945 END
5 0 2017-03-22 10:59:59.947 START
6 0 2017-03-22 10:59:59.955 END
顺便说一句,如果你最终得到的是:tid start_datetime stop_datetime
0 0 2017-03-22 10:59:59.864 2017-03-22 10:59:59.931
1 1 2017-03-22 10:59:59.933 2017-03-22 10:59:59.945
2 0 2017-03-22 10:59:59.947 2017-03-22 10:59:59.955
我尝试过的
df.sort(['tid', 'datetime']).groupby('tid').first().event == 'END'不包含数据帧中的初始索引,因此无法使用它删除行。(或者,如果可以的话,我不知道该怎么做)