Как идентифицировать идентичные группы с помощью pandas.groupby ()? - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь использовать панды для идентификации подразделов данных, которые идентичны.Так, например, если у меня есть такой фрейм данных, как:

   id  A  B 
0   1  1  2
1   1  2  3
2   1  5  6
3   2  1  2
4   2  2  3
5   2  5  6
6   3  8  9
7   3  4  0
8   3  9  7

Я хочу сгруппировать по идентификатору, поэтому строки 0 - 2 будут формировать группу 1, строки 3 - 5 будут формировать группу 2, а строки 6- 8 сформирует группу 3. Я знаю, что могу использовать pd.groupby() для группировки строк по идентификатору.В данном случае группа 2 является повторением группы 1 (столбцы A и B идентичны в обеих)

То, что я затем хочу сделать, - это удалить повторяющиеся группы, поэтому в этом случае я хотел бы удалитьвторая группа.Мой окончательный фрейм данных будет выглядеть так:

   id  A  B 
0   1  1  2
1   1  2  3
2   1  5  6
6   3  8  9
7   3  4  0
8   3  9  7

Каждый столбец в дублирующих группах одинаков, за исключением идентификатора, который отличается для каждой группы.Я хочу удалить группу, только если она идентична для каждой строки в группе .Любая помощь будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Это один из способов использования вспомогательного столбца и pd.Series.drop_duplicates.

Идея состоит в том, чтобы сначала создать отображение из id в кортеж значений, представляющих все строки для этогоid.Затем отбросьте дубликаты и извлеките индекс остатка.

df['C'] = list(zip(df['A'], df['B']))

s = df.groupby('id')['C'].apply(tuple)\
      .drop_duplicates().index

res = df.loc[df['id'].isin(s), ['id', 'A', 'B']]

print(res)

   id  A  B
0   1  1  2
1   1  2  3
2   1  5  6
6   3  8  9
7   3  4  0
8   3  9  7
0 голосов
/ 31 мая 2018

Чек pd.crosstab

s=pd.crosstab(df.id,[df.A,df.B]).drop_duplicates().unstack()
s[s!=0].reset_index().drop(0,1)
Out[128]: 
   A  B  id
0  1  2   1
1  2  3   1
2  4  0   3
3  5  6   1
4  8  9   3
5  9  7   3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...