pandas:删除连续重复项

工作中碰见了两种不同的需要删除的重复项的形式,记录一下。

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]

注意:

  1. 由于time是连续上升的,所以abs可要可不要,如果筛选列不是连续上升的,还是留着abs比较合适;
  2. .diff()默认是后一行和前一行对比之后,计算结果是第0行为NaN,和threshold对比后取反留下的值是时间相近的第一行,不符合要求。用了diff(-1),实现前一行和后一行对比,计算结果是最后一行为NaN,对比后取反留下的是时间相近的最后一行,是想要的效果了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值