公众号:尤而小屋
作者:Peter
编辑:Peter
今天给大家分享一个粉丝朋友问的一道关于Pandas题,提供多种解决思路!

需求(基础版本)
有下面的这样一个DataFrame(数据是模拟的),找出每个数值第一次出现的索引号:
这就是最终要展现的结果,如何解决?下面提供不同的解决思路

方法1-移位函数shift
shift函数是在指定的轴方向上进行移动指定的长度:
1、先向下移动一个单位,得到df2

2、为了后面的处理,df2进行属性字段的重命名:
df2.rename(columns={"col1":"col2"},inplace=True)
3、将df1和df2进行合并

4、筛选col1和col2不等的情况即可

方法2-差分函数diff
完整的一行代码如下:

下面我们拆解下这行代码:
1、差分函数diff
每个数据和前一个数值相减;如果两个值相等,差值为0

2、判断和0的关系
3、锁定为True的值即可

方法3:直接去重
一个很巧妙的方法:直接去重,保留第一条数据;但这仅仅是特例

需求(升级版)
需求还是类似,找出每个数值第一次出现的索引;但是数据会重复隔断出现。
下面已经标记了正确的结果:

方法1-shift函数
还是可以解决


结果:

方法2-差分函数diff
同样可以解决:

但是去重函数在这种情况就不行:drop_duplicates函数是对整体数据的去重,只保留一条数据

延伸知识点
在这里重点理解下移位函数shift和差分函数diff的关系,模拟一份数据:

diff函数


shift函数

二者关系
以默认移动一个单位为例



结论:在相同的条件下,原数据框 减掉 shift函数生成的数据就是diff函数的结果

思考题
什么情况下会用到移位或者差分函数?
- 机器学习交流qq群955171419,加入微信群请
扫码