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

Допустим, у меня есть таблица, которая выглядит следующим образом:

Company      Region     Date           Count         Amount
AAA          XXY        3-4-2018       766           8000
AAA          XXY        3-14-2018      766           8600
AAA          XXY        3-24-2018      766           2030
BBB          XYY        2-4-2018        66           3400
BBB          XYY        3-18-2018       66           8370
BBB          XYY        4-6-2018        66           1380

Я хочу избавиться от столбца Дата, затем агрегировать по компании И региону до найти среднее значение Count и сумму Amount .

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

Company      Region     Count         Amount
AAA          XXY        766           18630
BBB          XYY        66            13150

Я просматривал этот пост здесь и многие другие сообщения в Интернете, нопохоже, что они выполняют только один вид действия агрегации (например, я могу агрегировать по нескольким столбцам, но могу выводить только один столбец в виде суммы ИЛИ счетчика, НЕ суммы И подсчета)

Переименовать столбцы результатаиз агрегации Pandas («FutureWarning: использование dict с переименованием устарело»)

Может кто-нибудь помочь?

Что я сделал:

Я подписался на этот пост здесь:

https://www.shanelynn.ie/summarising-aggregation-and-grouping-data-in-python-pandas/

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

aggregation = {
    'Count': {
        'Total Count': 'mean'
    },
    'Amount': {
        'Total Amount': 'sum'
    }
}

Я бы получил это предупреждение:

FutureWarning: using a dict with renaming is deprecated and will be removed in a future version
  return super(DataFrameGroupBy, self).aggregate(arg, *args, **kwargs)

Я знаю, что это работает сейчас, но я хочу, чтобыУбедитесь, что мой сценарий работает позже.Как я могу обновить свой код для обеспечения совместимости в будущем?

Ответы [ 3 ]

0 голосов
/ 28 мая 2018
df.groupby(['Region', 'Company']).agg({'Count': 'mean', 'Amount': 'sum'}).reset_index()

выходы:

  Region Company  Count  Amount
0    XXY     AAA    766   18630
1    XYY     BBB     66   13150
0 голосов
/ 28 мая 2018

Попробуйте это:

df.groupby(["Company","Region"]).agg({"Count":'mean',"Amount":'sum'})
0 голосов
/ 28 мая 2018

Требуется агрегирование по одному не вложенному словарю, а затем по rename столбцам:

aggregation = {'Count':  'mean', 'Amount': 'sum'}
cols_d = {'Count': 'Total Count', 'Amount': 'Total Amount'}

df = df.groupby(['Company','Region'], as_index=False).agg(aggregation).rename(columns=cols_d)
print (df)
  Company Region  Total Count  Total Amount
0     AAA    XXY          766         18630
1     BBB    XYY           66         13150

Другое решение с add_prefix вместо rename:

aggregation = {'Count':  'mean', 'Amount': 'sum'}
df = df.groupby(['Company','Region']).agg(aggregation).add_prefix('Total ').reset_index()
print (df)
  Company Region  Total Count  Total Amount
0     AAA    XXY          766         18630
1     BBB    XYY           66         13150
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...