'Select all in pandas where column equals value and all other columns are blank

I have a DataFrame containing permissions for roles of each user, e.g.

function/role role1_permissions role2_permissions role3_permissions role4_permissions
can create Y Y N Y
can update Y Y Y N
can delete Y N Y N

I want to be able to select from the DataFrame where column role1_permissions = Y, where all other columns contain N.

(I can't install any other packages such as pandassql to do this)

I have currently only selected where column role1_permissions = Y:

filtered_permissions = permissions.loc[permissions[role1_permissions] == 'Y']

How do I select where all other columns equal N? Without specifying each column like this:

filtered_permissions = permissions.loc[permissions[role1_permissions] == 'Y'] & permissions.loc[permissions[role2_permissions] == 'N'] & permissions.loc[permissions[role3_permissions] == 'N'] ....


Solution 1:[1]

Chain 2 conditions - for compare role1_permissions for Y, then select all columns with _permissions by DataFrame.filter, remove first column, test for N if all values per rows by DataFrame.all:

print (permissions)
  function/role role1_permissions role2_permissions role3_permissions  \
0    can create                 Y                 Y                 N   
1    can update                 Y                 Y                 Y   
2    can delete                 Y                 N                 N   

  role4_permissions  
0                 Y  
1                 N  
2                 N  

mask = (permissions.role1_permissions.eq('Y') & 
        permissions.filter(like='_permissions')
                   .drop('role1_permissions', 1).eq('N').all(axis=1))

filtered_permissions = permissions[mask]
print (filtered_permissions)
  function/role role1_permissions role2_permissions role3_permissions  \
2    can delete                 Y                 N                 N   

  role4_permissions  
2                 N  

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 richardec