- 建立规则
针对多列的规则
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,很多时候会有一头雾水的感觉。
第三讲完毕