pandasCookbook 第三讲——建立规则

  • 建立规则
    针对多列的规则
import pandas as pd 
import numpy as np 
df=pd.DataFrame({'AAA':[4,5,6,7],'BBB':[10,20,30,40],'CCC':[100,50,-30,-50]}) 
df 
AAA BBB CCC
0 4 10 100
1 5 20 50
2 6 30 -30
3 7 40 -50

通过‘与’规则,这样会返回一个Series

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

0 4
1 5
Name: AAA, dtype: int64

通过 ‘或’规则,同样返回一个Series,注意我在这里的写法是df.BBB,等效于df['BBB']

newSeries=df.loc[(df.BBB>25) | (df.CCC >=75),'AAA'] 
newSeries 

0 4
2 6
3 7
Name: AAA, dtype: int64

通过对规则运用后的赋值,来得到一个修改后的dataframe

df.loc[(df.BBB>25)|(df.CCC>=75),['AAA','BBB']]=0.1 
df 
AAA BBB CCC
0 0.1 0.1 0.1
1 5.0 20.0 50.0
2 0.1 0.1 0.1
3 0.1 0.1 0.1

用argsort()对某个列排序 (按照与指定值最相近)

df=pd.DataFrame({'AAA':[4,5,6,7],'BBB':[10,20,30,40],'CCC':[100,50,-30,-50]}) 
df 
aValue=43.0 
df.ix[(df.BBB-aValue).abs().argsort()] 
AAA BBB CCC
3 7 40 -50
2 6 30 -30
1 5 20 50
0 4 10 100

用二元操作符动态地建立'标准list'并进行归约,这里有两种方式,直接&连接Reduce

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

#method1:&直接连接标准 
Crit1=df.AAA <= 5.5 Crit2 = df.BBB == 10.0 Crit3 = df.CCC > -40.0 
allCrit=Crit1 & Crit2 & Crit3 
df[allCrit] 

#method2: Reduce 建立 
critList=[Crit1,Crit2,Crit3] 
allCrit=functools.reduce(lambda x,y:x&y,critList) 
df[allCrit] 
# 效果完全相同 
AAA BBB CCC
0 4 10 100

tips:读者如果对reduce函数有疑问,可以百度“廖雪峰” 查看python基础语法教程中map和reduce函数的基础用法。
这里推荐python初学者认真学习廖雪峰教程 ,基础语法不甚解直接来学习pandas,很多时候会有一头雾水的感觉。

第三讲完毕

你可能感兴趣的:(pandasCookbook 第三讲——建立规则)