我有一组数据看起来如下:
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的第一性能,直到它改变。
发布于 2020-01-22 16:33:51
IIUC,使用助手系列和groupby+first
df.groupby(df['mz_id'].ne(df['mz_id'].shift()).cumsum()).first().reset_index(drop=True) id mz_id time duration
0 1 a 0:00 0:10
1 1 b 5:10 1:10
2 1 a 1:10:05 0:15
3 1 b 2:10:05 1:10
4 1 c 3:20:07 0:15详细信息:检查下一行是否与当前行相同,然后执行cumsum()将组分配给每个已更改的组,然后按该系列进行分组并首先返回
df['mz_id'].ne(df['mz_id'].shift())0 True
1 False
2 False
3 False
4 False
5 True
6 False
7 False
8 True
9 False
10 True
11 True因此,对于在下一行中具有相同值的所有第一行,这将返回true。
但是,正如@Datanovice所指出的那样,在您的示例中,下面的内容也会起作用,因为您只是占据了第一行。
df[df['mz_id'].ne(df['mz_id'].shift())]https://stackoverflow.com/questions/59864259
复制相似问题