Подсчитать и объединить целое число в Pandas GroupBy - PullRequest
3 голосов
/ 25 марта 2019

Допустим, это мой df

   A   B   C
0  a  33  13
1  b  44  14
2  a  55  15
3  a  66  16
4  b  77  17
5  c  88  18

, и я пытаюсь получить что-то вроде этого

   A      B         B     C
      count      list   sum
0  a      3  33,55,66    44
1  b      2     44,77    31
2  c      1        88    81

Есть ли какой-нибудь питонический способ сделать это?

Это мой код, но это не пифония

df.groupby('A').agg({'B': ["count", lambda x: ','.join(x.astype(str))], 'C':sum})

1 Ответ

3 голосов
/ 25 марта 2019

Вы можете передать DICT agg:

In [11]: df.groupby("A").agg({"B": ["count", list], "C": ["sum"]})
Out[11]:
      B                 C
  count          list sum
A
a     3  [33, 55, 66]  44
b     2      [44, 77]  31
c     1          [88]  18

Чтобы добавить запятую, я бы использовал функцию:

In [21]: def list_(ls):
    ...:     return ",".join(map(str, ls))
    ...:

In [22]: list_.__name__ = "list"

In [23]: df.groupby("A").agg({"B": ["count", list_], "C": ["sum"]})
Out[23]:
      B             C
  count      list sum
A
a     3  33,55,66  44
b     2     44,77  31
c     1        88  18
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...