我有一个看起来像这样的数据框:
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
答案 0 :(得分:3)
您可以将groupby
与unique
结合使用:
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())]