получение уникальных записей о ценности от группы панд - PullRequest
0 голосов
/ 30 августа 2018

У меня есть df:

df = pd.DataFrame({'type':['a', 'a', 'b', 'b'],
              'id':[1134, 5321, 2444, 2444],
              'amt':[45, 55, 13, 14]})

Я пытаюсь получить количество, сумму и среднее значение, а также уникальные идентификаторы столбца amt.

df.groupby('type')['amt'].agg(['count', 'sum', np.mean])

      count  sum  mean
type                  
a         2  100  50.0
b         2   27  13.5

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

        id                 amt           
     count   sum    mean count  sum  mean
type                                     
a        2  6455  3227.5     2  100  50.0
b        2  4888  2444.0     2   27  13.5

Что я не хочу. Я хочу первую таблицу, но с другим счетом другой столбец . Я пробовал ниже тоже безрезультатно.

df.groupby('type')['amt'].agg(['count', 'sum', np.mean, lambda x: len(np.unique(x['id']))])

ожидаемый результат:

      count  sum  mean  unique_id
type                  
a         2  100  50.0  2
b         2   27  13.5  1

1 Ответ

0 голосов
/ 30 августа 2018

Используйте agg с nunique. Вы не обязаны передавать список на agg, требуется также словарное сопоставление, что здесь необходимо.

res = df.groupby('type').agg({'amt': ['count', 'sum', 'mean'], 'id': 'nunique'})

       amt                 id
     count  sum  mean nunique
type
a        2  100  50.0       2
b        2   27  13.5       1

Если вы хотите сгладить столбцы (лично я думаю, что вы должны оставить их, их легче проиндексировать):

res.columns = res.columns.get_level_values(1)
print(res)

      count  sum  mean  nunique
type
a         2  100  50.0        2
b         2   27  13.5        1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...