Pandas 仅保留值的第一个外观,直到它更改为另一个值

Pandas 仅保留值的第一个外观,直到它更改为另一个值,pandas,Pandas,我的数据集如下所示: id mz_id time duration 1 a 0:00 0:10 1 a 0:01 0:10 1 a 0:05 0:10 1 a 0:07 0:10 1 a 0:09 0:1

我的数据集如下所示:

 id      mz_id      time        duration
  1        a        0:00           0:10
  1        a        0:01           0:10
  1        a        0:05           0:10
  1        a        0:07           0:10
  1        a        0:09           0:10
  1        b        5:10           1:10
  1        b        15:10          1:10
  1        b        35:10          1:10
  1        a        1:10:05        0:15
  1        a        1:20:07        0:15
  1        b        2:10:05        1:10
  1        c        3:20:07        0:15
等等

我希望保持值mz_id的第一个外观,如下所示:

 id      mz_id      time        duration
  1        a        0:00           0:10
  1        b        5:10           1:10
  1        a        1:10:05        0:15
  1        b        2:10:05        1:10
  1        c        3:20:07        0:15
这对mz_id和持续时间不是唯一的,我想不出在这种情况下如何删除它们。。。我的删除副本应仅基于以下内容:
始终保持mz_id的第一个外观,直到它发生变化

IIUC,首先使用助手系列和groupby+:

详情: 检查下一行是否与当前行相同,然后执行求和运算为每个更改的组分配一个组,然后按该序列分组并首先返回

df['mz_id'].ne(df['mz_id'].shift())
因此,对于下一行中具有相同值的所有第一行,这将返回true

然而,正如@datanearyor所指出的,在您的示例中,下面的方法同样有效,因为您只需要使用第一行

df[df['mz_id'].ne(df['mz_id'].shift())]

IIUC,首先使用助手系列和groupby+:

详情: 检查下一行是否与当前行相同,然后执行求和运算为每个更改的组分配一个组,然后按该序列分组并首先返回

df['mz_id'].ne(df['mz_id'].shift())
因此,对于下一行中具有相同值的所有第一行,这将返回true

然而,正如@datanearyor所指出的,在您的示例中,下面的方法同样有效,因为您只需要使用第一行

df[df['mz_id'].ne(df['mz_id'].shift())]

df[df['mz_id'].nedf['mz_id'].shift]也能工作吗?@datanoveler的观点很好。它不会针对不同的用例进行测试,但会对样本数据起作用:只要我们只看一个col,我想会的谢谢你们的时间和帮助:我有建议扩大你的答案,并逐步解释。因为我没有发现任何类似的问题,我想这会引起注意@Anajlim完成了,我认为DataNoveler的建议在您的示例中非常有效,他还应该发布一个答案。我要向他竖起大拇指df[df['mz_id'].nedf['mz_id'].shift]也能工作吗?@datanoveler的观点很好。它不会针对不同的用例进行测试,但会对样本数据起作用:只要我们只看一个col,我想会的谢谢你们的时间和帮助:我有建议扩大你的答案,并逐步解释。因为我没有发现任何类似的问题,我想这会引起注意@Anajlim完成了,我认为DataNoveler的建议在您的示例中非常有效,他还应该发布一个答案。我要向他竖起大拇指
df[df['mz_id'].ne(df['mz_id'].shift())]