Tenho um dataframe do Pandas que contém informações do usuário e também uma coluna para suas permissões:
UserName Permissions
John Doe 02
John Doe 11
Example 09
Example 08
User3 11
Estou tentando criar uma nova coluna chamada User Class
que é baseada em suas Permissões (olhando para todas as permissões dos usuários). Se um usuário tiver todas as permissões <10, ele será considerado Admin
. Se um usuário tiver todas as permissões >=10, ele será considerado User
. No entanto, se ele tiver permissões que sejam <10 e >=10, ele será codificado como Admin/User
. Então, minha saída resultante seria:
UserName Permissions User Class
John Doe 02 Admin/User
John Doe 11 Admin/User
Example 09 Admin
Example 08 Admin
User3 11 User
Qual seria a melhor maneira de fazer isso? Minha ideia original era fazer:
for UserName, User_df in df.groupby(by='UserName'):
LT10 = (User_df['Permissions'] < 10).any()
GTE10 = (User_df['Permissions'] >= 10).any()
if (LT10 & GTE10):
UserClass = 'Admin/User'
elif LT10:
UserClass = 'Admin'
elif GTE10:
UserClass = 'User'
df.at[User_df.index, 'User Class'] = UserClass
No entanto, isso parece muito ineficiente porque df
tem cerca de 800 mil registros
Agrupe pelo nome de usuário e use
transform
para calcular os valores de permissão min/max por grupo. Então use isso para calcularUser Class
usandonp.select
:Saída:
Outra solução possível:
Saída:
Eu usaria
pandas.cut
para mapear os valores para Admin/Usuário egroupby.transform
combinar as classes:Saída: