Панды: группировка по нескольким столбцам, объединение одного столбца при добавлении другого - PullRequest
0 голосов
/ 28 сентября 2018

Если бы у меня было следующее df:

      amount   name   role    desc
0        1.0    a      x       f
1        2.0    a      y       g
2        3.0    b      y       h
3        4.0    b      y       j
4        5.0    c      x       k
5        6.0    c      x       l
6        6.0    c      y       p

Я хочу сгруппировать по столбцам name и role, сложить amount, а также выполнить конкатенацию desc с ,:

      amount   name   role    desc
0        1.0    a      x       f
1        2.0    a      y       g
2        7.0    b      y       h,j
4        11.0   c      x       k,l
6        6.0    c      y       p

Каков будет правильный подход к этому?

Дополнительный вопрос: скажите, читается ли df из .csv ибыли другие несвязанные столбцы, как мне сделать этот расчет, а затем записать в новый .csv вместе с другими столбцами (та же схема, что и прочитанная)?

1 Ответ

0 голосов
/ 28 сентября 2018

Может быть не совсем дураком, но есть много вопросов, связанных с групповой агг

df.groupby(['name', 'role'], as_index=False)\
.agg({'amount':'sum', 'desc':lambda x: ','.join(x)})


    name    role    amount  desc
0   a       x       1.0     f
1   a       y       2.0     g
2   b       y       7.0     h,j
3   c       x       11.0    k,l
4   c       y       6.0     p

Редактировать: Если в фрейме данных есть другие столбцы, вы можете агрегировать их, используя «первый» или «последний»'или если их значения идентичны, включите их в группу.

Опция 1:

df.groupby(['name', 'role'], as_index=False).agg({'amount':'sum', 'desc':lambda x: ','.join(x), 'other1':'first', 'other2':'first'})

Опция 2:

df.groupby(['name', 'role', 'other1', 'other2'], as_index=False).agg({'amount':'sum', 'desc':lambda x: ','.join(x)})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...