首页 > 解决方案 > 仅获取 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'])

在此处输入图像描述

如何仅提取组中的一行与分组列上另一组的至少另一行匹配的组和行。请看下图,我想得到突出显示的行

在此处输入图像描述

我想根据蓝色和黑色中相互匹配的行获得红色行

抱歉,如果我的陈述模棱两可。任何帮助,将不胜感激

标签: pythonpandaspandas-groupby

解决方案


然后,您可以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

推荐阅读