'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 |