Объединить строки в pandas - PullRequest
1 голос
/ 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   C

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

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

Ответы [ 2 ]

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

Попробуйте:

df.groupby(['ID','Name']).agg(Revenue=('Revenue', 'sum'),
                              Subject=('Subject', " ".join),
                              Product=('Product', " ".join))\
  .reset_index()

Вывод:

|    |   ID | Name   |   Revenue | Subject       | Product   |
|----|------|--------|-----------|---------------|-----------|
|  0 |  123 | John   |       200 | Maths English | A B       |
|  1 |  246 | Mary   |        32 | History       | B         |
|  2 |  312 | Peter  |       106 | Maths Science | A C       |
3 голосов
/ 06 февраля 2020

Определить функцию полезности как & использовать агг.

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

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