【Python】粉丝的Pandas题:一题三解

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

今天给大家分享一个粉丝朋友问的一道关于Pandas题,提供多种解决思路!

6df6d8ce4b584ddb1f06f5d70a8afa73.png

需求(基础版本)

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

  • 2第一次出现索引为0

  • 3第一次出现索引为4

  • 7第一次出现索引为6

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

a1201857287101663c573660d983f973.png

方法1-移位函数shift

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

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

b35c1af159fa0f33aac9092f6d4de322.png

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

df2.rename(columns={"col1":"col2"},inplace=True)

3、将df1和df2进行合并

87c9797faf29a2709dfdd355de8b3a7f.png

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

635a3d1e8e6d1576da337d89aaaf8fbe.png

方法2-差分函数diff

完整的一行代码如下:

efa26ed1e125a85a2d518797fcac5fd6.png

下面我们拆解下这行代码:

1、差分函数diff

每个数据和前一个数值相减;如果两个值相等,差值为0

f4ae3d48b3f5ecca068ca8a6ce97615e.png

2、判断和0的关系

1946c6bdbb75ed9e3188a4b57f0b8915.png

3、锁定为True的值即可

79a71aec35ae55438a632f6e18d0fa5e.png

方法3:直接去重

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

fb3b16b2711e8afb7dbc97311e91c213.png

需求(升级版)

需求还是类似,找出每个数值第一次出现的索引;但是数据会重复隔断出现。

下面已经标记了正确的结果:

eea342bc5d8276bd05db70067204d4a2.png

方法1-shift函数

还是可以解决

811be2defd6ab75e018a0ca1df267fa3.png 33061654fc5445700e82928796c3fdee.png

结果:

4c47c4debe53f1f2a77bb768a3f022f2.png

方法2-差分函数diff

同样可以解决:

cab0b31a5ef572c0f5a5d40dfc9cc1df.png

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

54fdbc6f17e28b3f8cfefc0d57461358.png

延伸知识点

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

02bd83035201ee653cdbd61282c71afb.png

diff函数

2ae203dc8ca305b6b151bdbf250bd9cb.png c515f12eef433fac75f941895683c9f1.png

shift函数

c5be1db00b1481f8fa3989761a7da660.png 43144302945cb0265742599f7694ca57.png

二者关系

以默认移动一个单位为例

681447c45bdeefd3ae021dd8c3dbcaa0.png f07d4f20a187fe7d9ce02881bff2e0c9.png e4275ef914a2a37133be27f904eabc59.png

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

b1337888c1d4ed3a94485c1b1fd1b6dc.png

思考题

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

 
 

3ded69d92eb5c9b5acfc39c01797bd98.png

 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码

2d0e6b723a342a3f9f3d012061e963b7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值