熊猫如何对一个列进行分组并根据另一列的最小唯一值过滤数据框?

时间:2019-05-03 13:04:06

标签: python python-3.x pandas pandas-groupby

我有一个看起来像这样的数据框:

CP   AID   type
1    1      b
1    2      b
1    3      a
2    4      a
2    4      b
3    5      b
3    6      a
3    7      b

我想对CP列进行分组和过滤,以便它仅返回CP从AID列中至少具有3个唯一“对”的行。

结果应如下所示:

CP   AID   type
1    1      b
1    2      b
1    3      a
3    5      b
3    6      a
3    7      b

2 个答案:

答案 0 :(得分:3)

您可以将groupbyunique结合使用:

m = df.groupby('CP').AID.transform('unique').str.len() >= 3

print(df[m])
   CP  AID type
0   1    1    b
1   1    2    b
2   1    3    a
5   3    5    b
6   3    6    a
7   3    7    b

,如RafaelC在评论中所述:

m = df.groupby('CP').AID.transform('nunique').ge(3)

print(df[m])
   CP  AID type
0   1    1    b
1   1    2    b
2   1    3    a
5   3    5    b
6   3    6    a
7   3    7    b

答案 1 :(得分:0)

您可以这样做:

count = df1[['CP', 'AID']].groupby('CP').count().reset_index()
df1 = df1[df1['CP'].isin(count.loc[count['AID'] == 3,'CP'].values.tolist())]