【Pandas学习】多条件筛选DataFrame

目录

一、按列筛选

1、简单筛选

2、多条件筛选 

二、按行筛选

三、多条件组合

一、按列筛选

1、简单筛选

DataFrame\Series 执行><==这些运算符时,会将每一个元素进行比较,得到一个由结果(Boolean值)组成的相同大小的DataFrame\Series返回。

df = pd.DataFrame({"A":[1,1,1,2,3],"B":[3,3,5,3,8],"C":[1,5,5,2,7],"D":[1,2,3,6,7]})
df
   A  B  C  D
0  1  3  1  1
1  1  3  5  2
2  1  5  5  3
3  2  3  2  6
4  3  8  7  7
df > 4
       A      B      C      D
0  False  False  False  False
1  False  False   True  False
2  False   True   True  False
3  False  False  False   True
4  False   True   True   True
df["C"] > 4
0    False
1     True
2     True
3    False
4     True
Name: C, dtype: bool

2、多条件筛选 

相同大小的DataFrame\Series之间可以用&|~运算符进行运算,得到由结果组成的相同大小的DataFrame\Series

(df["C"] > 4) & (df["D"] < 4)
0    False
1     True
2     True
3    False
4    False
dtype: bool

要注意的是,&优先级比<>==高级,所以要记得加括号;还有就是andornot好像是被DataFrame/Series用于其他的运算了,因此不能用以代替&|~
df[]传入一个由boolean值组成Series的话,就可以筛选出True相应位置的行。

df[(df["C"] > 4) & (df["D"] < 4)]
   A  B  C  D
1  1  3  5  2
2  1  5  5  3

二、按行筛选

loc可以同时筛选行和列

df.loc[(df["C"] > 4) & (df["D"] < 4), (df.loc[0] == 1) & (df.loc[3] == 2)]
   A  C
1  1  5
2  1  5

DataFrame和list/dict/Serise比较时,会用每一行元素和list/dict/Series对应的元素进行比较

df[["A", "B"]] == [1, 3]
df[["A", "B"]] == {"B": 3, "A": 1}
df[["A", "B"]] == pd.Series({"A": 1, "B": 3})
       A      B
0   True   True
1   True   True
2   True  False
3  False   True
4  False  False

需要注意的是list和Series里面元素的顺序。
这时对得到的DataFrame使用all()方法,将每列的boolean值进行&运算,得到一个包含结果的Series。

(df[["A", "B"]] == pd.Series({"A": 1, "B": 3})).all(1)
0     True
1     True
2    False
3    False
4    False
dtype: bool

需要注意all()中的要加参数1,表示计算每一行的值,默认0的是计算每一列的值。
这样就可以将Series传入df[]中进行筛选了。

df[(df[["A", "B"]] == pd.Series({"A": 1, "B": 3})).all(1)]
   A  B  C  D
0  1  3  1  1
1  1  3  5  2

三、多条件组合

##df[(条件1)&(条件2)&(条件3)&...](只能筛选行)
df[(df["C"] > 4) & (df["D"] < 4)]
##df.loc[(列条件1)&(列条件2)&(列条件3)&..., (行条件1)&(行条件2)&(行条件3)&...]
df.loc[(df["C"] > 4) & (df["D"] < 4), (df.loc[0] == 1) & (df.loc[3] == 2)]
##必须用&、|、~来表示且、或、否,不能用and、or、not
##条件中如果带有比&、|、~低级的运算符,要记得给条件加括号
##loc只筛选行的话用:代替列条件部分

##条件是一个list/dict/Series的时候
##df[(df[[列1,列2]] == list/dict).all(1)]
df[(df[["A", "B"]] == [1, 3]).all(1)]
df[(df[["A", "B"]] == {"A": 1, "B": 3}).all(1)]
df[(df[["A", "B"]] == pd.Series({"A": 1, "B": 3})).all(1)]
##这种方法不适用于筛选列, 可以先将DataFrame转置

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年8月16日
下一篇 2023年8月16日

相关推荐