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())]