Как сгруппировать панды по одному столбцу и отфильтровать кадр данных на основе минимальных уникальных значений другого столбца? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть фрейм данных, который выглядит следующим образом:

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 имеет как минимум 3 уникальные «пары» изСтолбец AID.

Результат должен выглядеть следующим образом:

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

Ответы [ 2 ]

3 голосов
/ 03 мая 2019

Вы можете 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
0 голосов
/ 03 мая 2019

Вы можете сделать это:

count = df1[['CP', 'AID']].groupby('CP').count().reset_index()
df1 = df1[df1['CP'].isin(count.loc[count['AID'] == 3,'CP'].values.tolist())]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...