【Python】粉丝的Pandas题:一题三解
公众号:尤而小屋
作者:Peter
编辑:Peter
今天给大家分享一个粉丝朋友问的一道关于Pandas题,提供多种解决思路!
需求(基础版本)
有下面的这样一个DataFrame(数据是模拟的),找出每个数值第一次出现的索引号:
2第一次出现索引为0 3第一次出现索引为4 7第一次出现索引为6
这就是最终要展现的结果,如何解决?下面提供不同的解决思路
方法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,加入微信群请扫码
评论