简体   繁体   English

如果前一行等于某个值,则从 Pandas df 中删除一行

[英]Delete a row from a Pandas df if the previous row is equal to some value

I have a df我有一个df

index  id  action
 1     A    crawl
 2     A    walk
 3     A    run
 4     B   crawl
 5     B    run
 6     B    walk
 7     B    jump
 8     B    walk

I want to delete a certain row with text walk only if the previous row is run .只有在run前一行时,我才想删除带有 text walk的某一行。

Resulting df:结果df:

   index  id  action
     1     A    crawl
     2     A    walk
     3     A    run
     4     B   crawl
     5     B    run
     7     B    jump
     8     B    walk
df = df.drop(df[df['action'].eq('run').shift(1, fill_value=False) & df['action'].eq('walk')].index, axis=0)

Output: Output:

>>> df
   index id action
0      1  A  crawl
1      2  A   walk
2      3  A    run
3      4  B  crawl
4      5  B    run
6      7  B   jump
7      8  B   walk

This is your dataframe:这是您的 dataframe:

    import pandas as pd
    dataset = pd.DataFrame(
    {'index':list(range(1,9)),'id': ['A', 'A', 'A', 'B', 'B', 'B','B','B'], 
    'action': ['crawl','walk','run','crawl','run','walk','jump','walk']})

Then you can create a temp column with shifting action by one and write this condition:然后,您可以创建一个带有移位操作的临时列,并编写以下条件:

    dataset[(dataset.action!='walk') | (dataset['action'].shift(1)!='run')]

   

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM