仅获取Pandas groupby中组的匹配行

时间:2019-02-27 17:11:36

标签: python pandas pandas-groupby

我有以下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'])

enter image description here

如何仅提取组和行,其中一组的行与已分组的列中另一组的至少另一行匹配。请看下面的图片,我要突出显示行

enter image description here

我想根据彼此匹配的蓝色和黑色的行来获得红色行

很抱歉,如果我的陈述含糊。任何帮助将不胜感激

2 个答案:

答案 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)

制作一个包含所有允许组合的表,然后将其与此数据框进行内部联接。