Как избавиться от вложенных имен столбцов в Pandas от группы путем агрегации? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующий код, который находит общие и уникальные продажи для каждого сотрудника, используя группу по Employee_id и агрегирование по Customer_id.

Sales.groupby('Employee_id').agg({
    'Customer_id': [
        ('total_sales', 'count'),
        ('unique_sales', 'nunique')
]})

Важно знать, что я буду выполнять агрегирование и с другими столбцами, но пока это все, что я написал.Поэтому, если у вас есть предложенное решение, я прошу вас учесть это в случае, если оно что-то изменит.

Хотя это именно то, что я хочу, с точки зрения вычисления общих и уникальных продаж для каждого сотрудника и создания двух столбцов, он создает вложенные имена столбцов.Таким образом, имена столбцов выглядят как [['Customer_id', 'total_sales'), ('Customer_id', 'unique_sales')], чего я не хочу.Можно ли как-нибудь легко избавиться от вложенной части, включив только ['total_sales', 'unique_sales'], или проще всего просто переименовать столбцы, как только я все закончу?

Спасибо!

1 Ответ

0 голосов
/ 10 октября 2018

Вы можете просто переименовать столбцы:

import numpy as np
import pandas as pd
np.random.seed(2018)

df = pd.DataFrame(np.random.randint(10, size=(100, 3)), columns=['A','B','C'])
result = df.groupby('A').agg({'B': [('D','count'),('E','nunique')],
                              'C': [('F','first'),('G','max')]})
result.columns = result.columns.get_level_values(1)
print(result)

В качестве альтернативы, вы можете сохранить объект groupby и использовать grouped[col].agg(...) для создания подкадров данных, которые затем могут быть pd.concat 'отредактированы вместе.:

import numpy as np
import pandas as pd
np.random.seed(2018)
df = pd.DataFrame(np.random.randint(10, size=(100, 3)), columns=['A','B','C'])
grouped = df.groupby('A')
result = pd.concat([grouped['B'].agg([('D','count'),('E','nunique')]),
                    grouped['C'].agg([('F','first'),('G','max')])], axis=1)
print(result)

оба фрагмента кода дают следующее (хотя со столбцами, возможно, в другом порядке):

    D  E  F  G
A             
0  18  8  8  9
1  12  8  6  6
2  14  8  0  8
3  10  9  8  9
4   7  6  3  5
5   8  5  6  7
6   9  7  9  9
7   8  6  4  7
8   8  7  2  9
9   6  5  7  9

В целом, я думаю, что переименование столбцов после факта являетсяСамый простой и читаемый вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...