首页 > 解决方案 > 在元素计数不同于 1 的组上过滤 DataFrame

问题描述

我正在使用具有以下结构的 DataFrame:

import pandas as pd

df = pd.DataFrame({'group':[1,1,1,2,2,2,2,3,3,3],
                   'brand':['A','B','X','C','D','X','X','E','F','X']})

print(df)

   group brand
0      1     A
1      1     B
2      1     X
3      2     C
4      2     D
5      2     X
6      2     X
7      3     E
8      3     F
9      3     X

我的目标是只查看与他们关联的品牌只有一个X的组。由于第 2 组有两个等于品牌的观察值X,因此应该从生成的 DataFrame 中过滤掉它。

输出应如下所示:

   group brand
0      1     A
1      1     B
2      1     X
3      3     E
4      3     F
5      3     X

我知道我应该groupby在组列上做一个,然后过滤那些计数X不同于 1 的组。过滤部分是我挣扎的地方。任何帮助,将不胜感激。

标签: pythonpandasdataframe

解决方案


用于series.eq检查是否brand等于X,然后是 groupby 和transform sumand 过滤X计数等于 1 的组:

df[df['brand'].eq('X').groupby(df['group']).transform('sum').eq(1)]

   group brand
0      1     A
1      1     B
2      1     X
7      3     E
8      3     F
9      3     X

推荐阅读