例如,对于下面的示例数据集,我如何使用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,我们可以分两步完成:
-
当然,首先要确保您在"糖果数量";列:
df["Number of Candies"] = df["Number of Candies"].astype(float)
-
过滤行,其中";糖果数量";大于或等于3.1
df.loc[df["Number of Candies"] >= 3.1]
-
然后按";名称";并保持大于或等于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