Python 如何通过删除两个条件之间的所有内容来压缩熊猫中的行

Python 如何通过删除两个条件之间的所有内容来压缩熊猫中的行,python,pandas,Python,Pandas,我有一个键盘日志,告诉我何时按下/释放键: key state time z 1 0.133 d 1 0.298 d 0 0.36 a 1 0.522 a 1 0.6455 a 1 0.7744 a 1 0.9033 a 1 1.0322 a 1 1.1611 a 1 1.29 a 1 1.4189 a 1 1.5478 a 1 1.6767 a 1 1.8056 a 1

我有一个键盘日志,告诉我何时按下/释放键:

key state   time
z   1   0.133
d   1   0.298
d   0   0.36
a   1   0.522
a   1   0.6455
a   1   0.7744
a   1   0.9033
a   1   1.0322
a   1   1.1611
a   1   1.29
a   1   1.4189
a   1   1.5478
a   1   1.6767
a   1   1.8056
a   1   1.9345
a   1   2.0634
z   0   2.1923
a   0   2.3212
当按下某个键(状态=1)时,它将继续写入该键,直到返回到向上状态(状态=0)。我该如何压缩这样一个表,使其只包含第一次按下键的位置和松开键的时间的行?此表单将更容易计算按键持续时间

key state   time
z   1   0.133
d   1   0.298
d   0   0.36
a   1   0.522
z   0   2.1923
a   0   2.3212
我的第一个想法是使用我所知道的,即一个丑陋的循环,每个键都会重复:

(1) 检测按键的第一个实例并将行添加到新数据帧, (2) 遍历行,直到我们看到密钥已被释放,然后将其添加到dataframe, (3) 将所有内容追加到一个数据帧中,然后按时间排序

我对熊猫还不熟悉,但我知道一定有更好的方法可以充分利用数据帧。我已经发现了dataframe.shift(),但还不能完全理解如何处理按键/释放之间的非恒定行距离


任何建议都将不胜感激:)

这是
first()

钥匙 状态 时间 5. Z 1. 0.133 3. D 1. 0.298 2. D 0 0.36 1. A. 1. 0.522 4. Z 0 2.1923 0 A. 0 2.3212
你能把数据作为文本而不是图片添加到这个问题上吗?好的,换成文本。很好的解决方案+“很好,”罗伯雷蒙德说
dfu = df.groupby(["key","state"], as_index=False).first().sort_values("time")