Pandas使用Groupby transform筛选含user='abc'的id记录返回空如何解决
错误原因
你之前的写法使用transform('all')的逻辑为:要求同一id分组内的所有记录user字段都等于'abc',才会保留该分组的全部数据。你的数据集内每个id对应一场多用户参与的比赛,没有任何id满足所有参赛用户都是abc,因此返回空结果。
你此前筛选「同id下所有记录都满足duration>120且score>1500」的场景用all是正确的,而当前需求是「同id下只要存在至少一条user为abc的记录就保留整个分组」,需要替换聚合逻辑。
解决方法
将transform('all')替换为transform('any')即可,any()会在分组内有至少一条记录满足条件时,给该分组所有行返回True,完全匹配你的需求。
正确代码如下:
out = df2[(df2['user'].eq('abc')).groupby(df2['id']).transform('any')]
运行后返回的结果包含id=1、id=2的全部4条记录,即abc参与过的两场比赛的所有参赛用户数据。
内容的提问来源于stack exchange,提问作者idontknowmuch
相关产品推荐
相关产品推荐

