如果行中的所有值都等于False,则熊猫DF过滤器

时间:2020-01-13 10:40:58

标签: python pandas

我正在尝试过滤DF布尔值。我想选择在所有列中都具有False值的行。我已经尝试了几种变体,但到目前为止还没有。

我最近的尝试是:

example_data != True

运行此命令时,似乎整个df都返回了。

我确定这是一件简单的事情,我要么不知道,要么就忘记了过滤。

欢迎寻求修复的任何方向:)

示例数据

example_data = {'Meta_Description_contains_kw': 97     False
 99     False
 100    False
 101    False
 480    True 
 537    True 
 549    True 
 116    False
 120    False
 121    False
 482    True 
 123    True 
 125    False
 129    False
 550    False
 131    False
 593    True 
 136    False
 138    False
 140    False
 141    False
 143    False
 16     True 
 152    False
 157    False
 158    False
 160    False
 175    False
 594    True 
 186    False
 194    False
 605    False
 197    False
 488    True 
 525    True 
 202    False
 585    True 
 207    False
 493    False
 634    True 
 642    True 
 231    False
 498    True 
 619    False
 510    False
 50     False
 512    False
 Name: Meta_Description_contains_kw, dtype: bool,
 'Title_1_contains_kw': 97     False
 99     False
 100    False
 101    False
 480    True 
 537    True 
 549    True 
 116    False
 120    False
 121    False
 482    True 
 123    True 
 125    False
 129    False
 550    False
 131    False
 593    True 
 136    False
 138    False
 140    False
 141    False
 143    False
 16     True 
 152    False
 157    False
 158    False
 160    False
 175    False
 594    True 
 186    False
 194    False
 605    False
 197    False
 488    True 
 525    True 
 202    False
 585    True 
 207    False
 493    False
 634    True 
 642    True 
 231    False
 498    True 
 619    False
 510    False
 50     False
 512    False
 Name: Title_1_contains_kw, dtype: bool,
 'H1-1_contains_kw': 97     False
 99     False
 100    False
 101    False
 480    True 
 537    True 
 549    True 
 116    False
 120    False
 121    False
 482    True 
 123    True 
 125    False
 129    False
 550    False
 131    False
 593    True 
 136    False
 138    False
 140    False
 141    False
 143    False
 16     True 
 152    False
 157    False
 158    False
 160    False
 175    False
 594    True 
 186    False
 194    False
 605    False
 197    False
 488    True 
 525    True 
 202    False
 585    True 
 207    False
 493    False
 634    True 
 642    True 
 231    False
 498    True 
 619    False
 510    False
 50     False
 512    False
 Name: H1-1_contains_kw, dtype: bool,
 'H2-1_contains_kw': 97     False
 99     False
 100    False
 101    False
 480    True 
 537    True 
 549    True 
 116    False
 120    False
 121    False
 482    False
 123    True 
 125    False
 129    False
 550    False
 131    False
 593    True 
 136    False
 138    False
 140    False
 141    False
 143    False
 16     True 
 152    False
 157    False
 158    False
 160    False
 175    False
 594    True 
 186    False
 194    False
 605    False
 197    False
 488    False
 525    True 
 202    False
 585    False
 207    False
 493    False
 634    False
 642    True 
 231    False
 498    False
 619    False
 510    False
 50     False
 512    False
 Name: H2-1_contains_kw, dtype: bool,
 'H2-2_contains_kw': 97     False
 99     False
 100    False
 101    False
 480    True 
 537    False
 549    True 
 116    False
 120    False
 121    False
 482    False
 123    True 
 125    False
 129    False
 550    False
 131    False
 593    False
 136    False
 138    False
 140    False
 141    False
 143    False
 16     True 
 152    False
 157    False
 158    False
 160    False
 175    False
 594    False
 186    False
 194    False
 605    False
 197    False
 488    False
 525    False
 202    False
 585    False
 207    False
 493    False
 634    True 
 642    False
 231    False
 498    False
 619    False
 510    False
 50     False
 512    False
 Name: H2-2_contains_kw, dtype: bool}

5 个答案:

答案 0 :(得分:2)

您可以尝试这个example_data=example_data[example_data!=True]

答案 1 :(得分:1)

嘿,我认为此伪代码可以帮助您理解逻辑。

for column in df.columns:
    if df[column].dtype == bool and not any(df[column]):
            print('The column `%s` has all false values'%column)

基本上在所有列上进行迭代,并检查类型是否为bool。 当类型为book时,我将any函数应用于该列,如果任何True值返回False,它将返回True。

答案 2 :(得分:1)

使用DataFrame.all,将所有列都按~进行反转,并按boolean indexing进行过滤:

df = df[(~df).all(axis=1)]
#if want seelct only boolean columns
df = df[(~df.select_dtypes(bool)).all(axis=1)]
print (df.head())
     Meta_Description_contains_kw  Title_1_contains_kw  H1-1_contains_kw  \
50                          False                False             False   
97                          False                False             False   
99                          False                False             False   
100                         False                False             False   
101                         False                False             False   

     H2-1_contains_kw  H2-2_contains_kw  
50              False             False  
97              False             False  
99              False             False  
100             False             False  
101             False             False  

答案 3 :(得分:0)

example_data = example_data.loc[!(column1 & column2 &.....)]

我认为这可以解决问题(假设example_data是数据框的变量名)

答案 4 :(得分:0)

您可以通过换位(两次)来实现。

df = pd.DataFrame({'A': [True, True, False, False], 'B': [True, False, True, False]})

df[df.T.all().T]