- 建立規(guī)則
針對(duì)多列的規(guī)則
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 |
通過(guò)‘與’規(guī)則,這樣會(huì)返回一個(gè)Series
newSeries=df.loc[(df['BBB']<25)&(df['CCC']>=-40),'AAA']
newSeries
0 4
1 5
Name: AAA, dtype: int64
通過(guò) ‘或’規(guī)則,同樣返回一個(gè)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
通過(guò)對(duì)規(guī)則運(yùn)用后的賦值,來(lái)得到一個(gè)修改后的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()對(duì)某個(gè)列排序 (按照與指定值最相近)
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 |
用二元操作符動(dòng)態(tài)地建立'標(biāo)準(zhǔn)list'并進(jìn)行歸約,這里有兩種方式,直接&連接Reduce
df=pd.DataFrame({'AAA':[4,5,6,7],'BBB':[10,20,30,40],'CCC':[100,50,-30,-50]})
#method1:&直接連接標(biāo)準(zhǔn)
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:讀者如果對(duì)reduce函數(shù)有疑問(wèn),可以百度“廖雪峰” 查看python基礎(chǔ)語(yǔ)法教程中map和reduce函數(shù)的基礎(chǔ)用法。
這里推薦python初學(xué)者認(rèn)真學(xué)習(xí)廖雪峰教程 ,基礎(chǔ)語(yǔ)法不甚解直接來(lái)學(xué)習(xí)pandas,很多時(shí)候會(huì)有一頭霧水的感覺。
第三講完畢