通过检查列值的等效性来子集数据帧

孤独僧侣

我有一个X角色(角色为“ A”)的数据框:

Friend  Role
Alice   A
Bob     A
Cooper  B
Don     C

我想对该数据框进行子集化,并仅保留其中朋友也具有角色“ A”的那些行。此外,如果人X的角色为B或C,我想保留角色不是'A'的行。

因此,如果人X拥有A,则结果将是:

Friend  Role
Alice   A
Bob     A

如果X人的角色为“ B”或“ C”,则结果为:

Friend  Role
Cooper  B
Don     C

如何在Python中实现?

编辑:基于答案,我意识到我应该更具体。我不想对规则进行硬编码。本质上,我们可以有一个对象“ PersonXRole”,它可以是A,B或C。基于该对象,应根据上面定义的规则对结果数据帧进行过滤。

我最初的想法是:

if PersonXRole=='A':
   return (people with role A)
else:
   return (people with role B or C)

但我不确定这是否是一种有效的方法

米格尔·特雷霍(Miguel Trejo)

您可以按X可能的角色列表进行过滤,更容易传递1个或多个角色选项。

现在要根据人员的角色来验证要通过的过滤器,如果有两种情况,可以应用lambda函数。考虑下面的例子

person_role = 'A'

# Determine which list to filter by 
fn_filter = lambda x: ['A'] if x == 'A' else ['B', 'C']

# Filter Friends roles of person_role
df[df.Role.isin(fn_filter(person_role))]
>>> 
    Friend  Role
0   Alice   A
1   Bob     A

或者如果 person_role = 'C'

person_role = 'C'

df[df.Role.isin(fn_filter(person_role))]
>>> 
    Friend  Role
2   Cooper  B
3   Don     C

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章