工作中碰见了两种不同的需要删除的重复项的形式,记录一下。
1. 经过筛选后的某列值(value)中有重复项,需要剔除时间靠后的重复项
主要思路:对比相近两点的值,不一样的就保留,一样的扔掉
Change = df.value.loc[df.value.shift()!= df.value]
.shift会形成一个新的series,是value列中每个值向后移一位的结果。对比两个结果,如果不同的话取该行保存至Change中。
.shift()可以实现平移多行。
2. 经过筛选后的某列值相同,需要剔除时间相近的点,只保留时间接近点中时间最大的点
主要思路:对比接近时间点,设一个时间threshold,做一个mask,该mask取时间差值,如果小于threshold的扔掉
threshold = 100
mask = df['time'].diff(-1).abs()<threshold
data = data[~mask]
注意:
- 由于time是连续上升的,所以abs可要可不要,如果筛选列不是连续上升的,还是留着abs比较合适;
- .diff()默认是后一行和前一行对比之后,计算结果是第0行为NaN,和threshold对比后取反留下的值是时间相近的第一行,不符合要求。用了diff(-1),实现前一行和后一行对比,计算结果是最后一行为NaN,对比后取反留下的是时间相近的最后一行,是想要的效果了。