大家好,我是才哥。
本系列将用于记录在日常中遇到的一些问题的答疑解惑,这些问题可能来自咱们可爱的粉丝又或者来自咱自己。行文会比较简洁,解决方案不一定最优,欢迎大家交流~
让我们正式开始吧!
今天有个粉丝问了一个Pandas
的数据处理问题,似曾相似,咱们一起看看吧!
问题
问题: df,有name,job两列, 筛选条件,job=0,并且这行name和上一行(前值)不同 把符合条件行的job从0改为1
我们就基于自己的思路,自己构建模拟数据直接开干了!
代码语言:javascript复制In [1]: import pandas as pd
In [2]: df = pd.read_clipboard()
In [3]: df
Out[3]:
name job
0 小明 1
1 小明 0
2 华仔 0
3 小K 1
4 马里奥 0
5 花开 1
6 花开 0
In [4]: df.loc[(df['name']==df['name'].shift())&(df['job']==0), 'job'] = 1
In [5]: df
Out[5]:
name job
0 小明 1
1 小明 1
2 华仔 0
3 小K 1
4 马里奥 0
5 花开 1
6 花开 1
由于需求是对比上一行的值,所以这里用到的是shift
操作,默认情况下是向下移一位,然后就可以直接进行对比,再结合另外一个的值属性判断。满足条件的,我们直接将相关值进行赋值操作即可!
关于这个需求,我们还可以通过 遍历或者构建函数用apply等进行实现,这里就不做展开了,感兴趣的朋友可以自己试试!