猿问

Pandas 过滤多个条件

我正在尝试使用.isin过滤具有多个条件的数据


我用这样的数据创建了一个数据框。


    col_a   col_b   col_c

    abc     yes     a

    abc     no      b

    abc     yes     a

    def     no      b

    def     yes     a

    def     no      b

    def     yes     a

    def     no      b

    ghi     yes     a

    ghi     no      b

    ghi     yes     a

当我尝试这种类型的过滤时,参考我在堆栈溢出时看到的这个解决方案,我得到了所有的 NaN 值。 Pandas:过滤多个条件


如何应用这三个条件进行过滤?


fil_1 = test.isin({'col_a': ['abc','def','ghi']})

fil_2 = test.isin({'col_b': ['yes']})

fil_3 = test.isin({'col_c' :['a']})

data = test[fil_1 & fil_2 & fil_3]

data


翻过高山走不出你
浏览 71回答 3
3回答

隔江千里

你需要:fil_1 = test['col_a'].isin(['abc','def','ghi'])fil_2 = test['col_b'].isin(['yes'])fil_3 = test['col_c'].isin(['a'])或者test.isin({'col_a': ['abc','def','ghi'],           'col_b': ['yes'],           'col_c' :['a']}).all(axis = 1)df_filtered = test[fil_1 & fil_2 & fil_3]print(df_filtered)   col_a col_b col_c0    abc   yes     a2    abc   yes     a4    def   yes     a6    def   yes     a8    ghi   yes     a10   ghi   yes     a或逻辑|fil = test.isin({'col_a': ['abc','def','ghi'],'col_b': ['yes'],'col_c' :['a']})df_filtered = df[fil]print(df_filtered)   col_a col_b col_c0    abc   yes     a1    abc   NaN   NaN2    abc   yes     a3    def   NaN   NaN4    def   yes     a5    def   NaN   NaN6    def   yes     a7    def   NaN   NaN8    ghi   yes     a9    ghi   NaN   NaN10   ghi   yes     a现在,如果我们还使用DataFrame.all:df_filtered = df[fil.all(axis = 1)]print(df_filtered)   col_a col_b col_c0    abc   yes     a2    abc   yes     a4    def   yes     a6    def   yes     a8    ghi   yes     a10   ghi   yes     a细节print(fil)    col_a  col_b  col_c0    True   True   True1    True  False  False2    True   True   True3    True  False  False4    True   True   True5    True  False  False6    True   True   True7    True  False  False8    True   True   True9    True  False  False10   True   True   Trueprint(test.isin({'col_a': ['abc','def','ghi']}))    col_a  col_b  col_c0    True  False  False1    True  False  False2    True  False  False3    True  False  False4    True  False  False5    True  False  False6    True  False  False7    True  False  False8    True  False  False9    True  False  False10   True  False  False这个返回False的列差异比col_a 所以你得到NaN的值是因为你正在使用&

牧羊人nacy

过滤数据框的可能解决方案如下:“cond1”选择 col_a 中的所有值,即“abc”或“def”或“ghi”。那么 col_b 只是“yes”,col_c 只是“a”。cond1=(apd.col_a=="abc") | (apd.col_a=="def") | (apd.col_a=="ghi")apd[ cond1 & (apd.col_b=="yes") & (apd.col_c=="a")]结果:    col_a   col_b   col_c0   abc     yes     a2   abc     yes     a4   def     yes     a6   def     yes     a8   ghi     yes     a10  ghi     yes     a

侃侃无极

这是单线解决方案,test[test.col_a.isin(['abc','def','ghi']) & test.col_b.isin(['yes']) & test.col_c.isin(['a'])]
随时随地看视频慕课网APP

相关分类

Python
我要回答