Pandas Groupby如何筛选同时存在两个color子组并取black的最大计数值
解决方案
你得到的groupdf是带三级索引(索引层级依次为id、group、color)的Series,值为对应分组的计数结果,直接基于该对象操作即可,两步实现需求:
步骤1:筛选同时包含white、black的(id, group)组
对前两级索引分组,过滤出color索引同时包含两个目标值的组:
filtered = groupdf.groupby(level=['id', 'group']).filter( lambda x: {'white', 'black'}.issubset(x.index.get_level_values('color')) )
运行后会自动剔除只有单种颜色的(id, group)组,示例中的(i1, aa)、(i1, ac)、(i2, bb)、(i2, ad)都会被过滤。
步骤2:提取black值并按id取最大值
从过滤结果中只提取color为black的计数,再按id分组取最大值:
result = filtered.xs('black', level='color').groupby(level='id').max()
最终输出的result和你预期的格式完全一致:
id i1 5 i2 6 dtype: int64
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

