一道Pandas题:3种解法

语言: CN / TW / HK

theme: smartblue

公众号:尤而小屋
作者:Peter
编辑:Peter

大家好,我是Peter~

今天给大家分享一个粉丝朋友问的一道关于Pandas题。看上去题目需求简单,实际上自己体会!

需求(基础版本)

有下面的这样一个DataFrame(数据是模拟的),找出每个数值第一次出现的索引号:

  • 2第一次出现索引为0
  • 3第一次出现索引为4
  • 7第一次出现索引为6

这就是最终要展现的结果,如何解决?下面提供不同的解决思路

方法1-移位函数shift

shift函数是在指定的轴方向上进行移动指定的长度:

1、先向下移动一个单位,得到df2

2、为了后面的处理,df2进行属性字段的重命名:

python 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函数的结果

思考题

什么情况下会用到移位或者差分函数?