Агрегирование строк во фрейме данных и устранение дубликатов - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу объединить строки в моем df, чтобы у меня была одна уникальная строка для каждого идентификатора / имени с другими значениями, суммированными (доход) или объединенными (тема и продукт). Однако там, где я объединяюсь, я не хочу, чтобы дубликаты появлялись.

Мой df похож на это:

ID   Name   Revenue   Subject   Product
123  John   125       Maths     A
123  John   75        English   B
246  Mary   32        History   B
312  Peter  67        Maths     A
312  Peter  39        Science   A

Я использую следующий код для объединения строк в моем фрейме данных

def f(x): return ' '.join(list(x))

df.groupby(['ID', 'Name']).agg( 
  {'Revenue': 'sum', 'Subject': f, 'Product': f} 
)

Это приводит к выводу, подобному этому:

ID   Name   Revenue   Subject        Product
123 John    200       Maths English  A B
246 Mary    32        History        B
312 Peter   106       Maths Science  A A

Как я могу изменить свой код так, чтобы дубликаты были удалены в моей конкатенации? Таким образом, в приведенном выше примере последняя строка будет читать A в Product, а не A A

1 Ответ

1 голос
/ 06 февраля 2020

Вы очень близки. Сначала примените набор на предметы, прежде чем перечислять и присоединяться к ним. Это вернет только уникальные предметы

def f(x): return ' '.join(list(set(x)))

df.groupby(['ID', 'Name']).agg( 
  {'Revenue': 'sum', 'Subject': f, 'Product': f} 
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...