pandas 预处理类似 if 的写法

用比较琐碎的时间整理经常用的东西

import pandas as pd
import numpy as np
import functools
df = pd.DataFrame( {'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]});

pandas 预处理类似 if 的写法_第1张图片

 

df.loc[df.AAA >= 5,'BBB'] = -1

满足AAA列中>=5,让BBB列该行的值替换成-1,达到如下效果;

pandas 预处理类似 if 的写法_第2张图片

满足AAA列中>=5,让BBB,CCC列该行的值替换成555,满足AAA列中<5,让BBB,CCC列该行的值替换成2000这里面分两步的:

df.loc[df.AAA >= 5,['BBB','CCC']] = 555

pandas 预处理类似 if 的写法_第3张图片

df.loc[df.AAA < 5,['BBB','CCC']] = 2000

 pandas 预处理类似 if 的写法_第4张图片

df['logic'] = np.where(df['AAA'] > 5,'high','low');  

 联合numpy里面的where  将AAA中的>=5,是的变成high,小于的变成low,并且复制到给logic

注:np.where(condition,x,y) 是三元运算符,conditon条件成立则结果为x,否则为y

pandas 预处理类似 if 的写法_第5张图片

 

newseries = df.loc[(df['BBB'] >=555) & (df['logic'] =="low"), 'AAA'];
newseries

 选出了满足BBB大于555且logic列是low的AAA列,结果如上

df.loc[(df['BBB'] < 25) & (df['CCC'] >= -40), 'AAA']=-1

将满足条件的AAA给它赋值-1,最好这种方法用df.copy以防数据过程被改,后面又要会重新跑比较麻烦。

 

df["AAA"]=df["AAA"].map(lambda x : "low" if x<=6 else "high")
df

用lambda 或者filter 然后也是一样的效果,不过这个跑起来有点慢,毕竟遍历整列或者其它列组合 

pandas 预处理类似 if 的写法_第6张图片

你可能感兴趣的:(笔记)