[编辑澄清问题]
我有大型数据框(约1万行),前几行看起来就像我称之为df_a:
logtime | zone | value
01/01/2017 06:05:00 | 0 | 14.5
01/01/2017 06:05:00 | 1 | 14.5
01/01/2017 06:05:00 | 2 | 17.0
01/01/2017 06:25:00 | 0 | 14.5
01/01/2017 06:25:00 | 1 | 14.5
01/01/2017 06:25:00 | 2 | 10.0
01/01/2017 06:50:00 | 0 | 10.0
01/01/2017 06:50:00 | 1 | 10.0
01/01/2017 06:50:00 | 2 | 10.0
01/01/2017 07:50:00 | 0 | 14.5
01/01/2017 07:50:00 | 1 | 14.5
01/01/2017 07:50:00 | 2 | 14.5
etc.
我希望删除连续重复项,以便只留下有关区域如何变化的信息。例如,如果区域1在两个日志时间内位于14.5,则将删除重复项,直到更改为10.0。这样我就得到了一个像这样的数据框:
logtime | zone | value
01/01/2017 06:05:00 | 0 | 14.5
01/01/2017 06:05:00 | 1 | 14.5
01/01/2017 06:05:00 | 2 | 17.0
01/01/2017 06:25:00 | 2 | 10.0
01/01/2017 06:50:00 | 0 | 10.0
01/01/2017 06:50:00 | 1 | 10.0
01/01/2017 07:50:00 | 0 | 14.5
01/01/2017 07:50:00 | 1 | 14.5
01/01/2017 07:50:00 | 2 | 14.5
etc.
我的理解是drop_duplicates
仅保留唯一的值,因此这对我的目标不起作用。
我还尝试使用.loc和shift方法:
removeduplicates = df.loc[ (df.logtime != df.logtime.shift(1)) | (df.zone != df.zone.shift(1)) | (df.value != df.value.shift(1))]
但是,这不会失败也不起作用,无法获得所需的输出。谢谢!
答案 0 :(得分:2)
您可以创建一个布尔蒙版,其中每组区域的连续值之间的差异不等于0:
print (df[df.groupby(['zone']).value.diff().ne(0)])
logtime zone value
0 01/01/2017 06:05:00 0 14.5
1 01/01/2017 06:05:00 1 14.5
2 01/01/2017 06:05:00 2 17.0
5 01/01/2017 06:25:00 2 10.0
6 01/01/2017 06:50:00 0 10.0
7 01/01/2017 06:50:00 1 10.0