我有以下df:
d = {"Col1":['a','d','b','c','a','d','b','c'],
"Col2":['x','y','x','z','x','y','z','y'],
"Col3":['n','m','m','l','m','m','l','l'],
"Col4":[1,4,2,2,1,4,2,2]}
df = pd.DataFrame(d)
当我在三个字段上分组时,会得到结果:
gb = df.groupby(['Col1', 'Col2', 'Col3'])['Col4'].agg(['sum', 'mean'])
如何仅提取组和行,其中一组的行与已分组的列中另一组的至少另一行匹配。请看下面的图片,我要突出显示行
我想根据彼此匹配的蓝色和黑色的行来获得红色行
很抱歉,如果我的陈述含糊。任何帮助将不胜感激
答案 0 :(得分:2)
您可以先reset_index
,然后再使用duplicated
和布尔索引过滤数据框:
gb = gb.reset_index()
gb[gb.duplicated(subset=['Col2','Col3'], keep=False)]
输出:
Col1 Col2 Col3 sum mean
0 a x m 1 1
2 b x m 2 2
3 b z l 2 2
5 c z l 2 2
答案 1 :(得分:0)
制作一个包含所有允许组合的表,然后将其与此数据框进行内部联接。