选择满足至少一个条件的所有组

2024-05-12 22:28:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望至少保留一次满足条件的组的所有行。换句话说,我想至少删除一次不满足条件的组。你知道吗

我四处找了几个小时,找不到解决办法。This was the closest I got但我无法实现答案。你知道吗

我有以下数据框:

test = pd.DataFrame({"Gr":[1,1,2,2],"Bk":[9,1,8,5]})
print(test)

   Gr  Bk
0   1   9
1   1   1
2   2   8
3   2   5

我想按test["Gr"]分组,并至少选择一次test["Bk"] == 9所在的所有组以达到以下目的:

# Drop Gr 2 because they didn't meet Bk == 1 in any of its rows.
   Gr  Bk
0   1   9
1   1   1

我本以为这可以通过组合groupby().any()而不需要lambda函数来实现。你知道吗

我试过这个:

test.groupby("Gr").filter(lambda x: (x.Bk == 9).all())

Tags: the数据lambda答案testanythisbk
3条回答

使用GroupBy.transformeq.any在每组内检查any值是否等于(eq)到9

mask = test.groupby('Gr')['Bk'].transform(lambda x: x.eq(9).any())
test[mask]

输出

   Gr  Bk
0   1   9
1   1   1

没有groupby是有可能的。只需检查所有条目是否等于9,获取该条目的组,并为提取的组切片整个数据帧。你知道吗

test[test.Gr.isin(test[test['Bk'].eq(9)].Gr)]

结果

    Gr  Bk
0   1   9
1   1   1

易于理解filter

test.groupby('Gr').filter(lambda x : x['Bk'].eq(9).any())
   Gr  Bk
0   1   9
1   1   1

相关问题 更多 >