如何使用 pandas groupby.filter 保留至少一个值小于 24 的组

How to keep groups with at least one value less than 24 using pandas groupby.filter

我有一个看起来像这样的数据框:

CCode   CId      State       Age
326112  1217012  Nebraska    20
326112  1217012  Nebraska    75
326112  1217012  Nebraska    107

320113  1317012  Alabama     37
320113  1317012  Alabama     38
320113  1317012  Alabama     39

320180  8017061  Arkansas    37
320180  8017061  Arkansas    38
320180  8017061  Arkansas    39

326112  1217011  California  36
326112  1217011  California  37
326112  1217011  California  38

我试图保留至少有一个年龄在 24 岁以下的组,并对过滤后的组重新分组。

我尝试按 4 列分组并使用链式 lambda 进行过滤:

df.groupby(['State', 'CId', 'CCode', 'Age']).filter(lambda x:x['Age'].sum()<23).groupby(['State', 'CId', 'CCode', 'Age']).std()

这会失去该组的其余成员:

CCode   CId      State       Age
326112  1217012  Nebraska    20

需要输出:

CCode   CId      State       Age
326112  1217012  Nebraska    20
326112  1217012  Nebraska    75
326112  1217012  Nebraska    107

基于

what I would like to do is keep the groups that have an age starting below 24

  1. 从石斑鱼中删除 Age
  2. 测试是否any Age in the group is lt(小于)24
df.groupby(['State', 'CId', 'CCode']).filter(lambda g: g.Age.lt(24).any())

#     CCode      CId     State  Age
# 0  326112  1217012  Nebraska   20
# 1  326112  1217012  Nebraska   75
# 2  326112  1217012  Nebraska  107

如果您必须仅根据 起始年龄 进行严格过滤,一种方法是使用 iloc:

df.groupby(["State", "CId", "CCode"]).filter(lambda x: x["Age"].iloc[0] < 24)

输出:

    CCode      CId     State  Age
0  326112  1217012  Nebraska   20
1  326112  1217012  Nebraska   75
2  326112  1217012  Nebraska  107