如何为每个组设置筛选条件



例如,对于下面的示例数据集,我如何使用jupyter笔记本设置过滤条件,在那里我可以找出谁有2个或多个";糖果数量";大于或等于3.1?

ID 名称 候选项数
1 Jerry 3.1
1 Jerry 3
1 Jerry 2
2 Tom 6
2 Tom 5.8
3 Wendy 3.1
3 Wendy 3.2

如果您可以使用panda,我们可以分两步完成:

  1. 当然,首先要确保您在"糖果数量";列:

    df["Number of Candies"] = df["Number of Candies"].astype(float)
    
  2. 过滤行,其中";糖果数量";大于或等于3.1

    df.loc[df["Number of Candies"] >= 3.1]
    
  3. 然后按";名称";并保持大于或等于2 的组

    .groupby("Name").filter(lambda group: len(group) >= 2)
    

你可以把这两个条件放在一起,在一行中得到你想要的结果:

>>> df.loc[df["Number of Candies"] >= 3.1].groupby("Name").filter(lambda group: len(group) >= 2)
ID    Name  Number of Candies
3   2    Tom                 6.0
4   2    Tom                 5.8
5   3  Wendy                 3.1
6   3  Wendy                 3.2

您可以使用按组计算的布尔掩码:

#             is more than 3.1?       /    get count of True per group    / ≥ 2? 
mask = df['Number of Candies'].ge(3.1).groupby(df['ID']).transform('sum').ge(2)
df[mask]

输出:

ID   Name  Number of Candies
3   2    Tom                6.0
4   2    Tom                5.8
5   3  Wendy                3.1
6   3  Wendy                3.2

最新更新