Pandas: агрегированный и групповой с помощью IDE: Pycharm

#python #python-3.x #pycharm #pandas-groupby #pandasql

#python #python-3.x #pycharm #pandas-groupby #pandasql

Вопрос:

QQ — IDE: Pycharm — я использую приведенный ниже примерный формат фрейма данных

 Name       Business        SegmentID   Revenue    Margin  OrderQuantity
James      Commercial      1001         1500      100     1
Joe        Consumer        1002         800       10      1
James      Commercial      1003         1900      110     2
James      Commercial      1004         1800      105     3
Samuel     Commercial      1005         1800      105     1
  

Я хочу агрегировать его в формате ниже

 Name      Revenue  Margin  OrderQuantity
James     5200     315     6
Joe       800      10      1
Samuel    1800     105     1
  

Что я сделал до сих пор?

Импорт данных из pyodbc, передаваемых в фрейм данных pandas

 df.groupby(['Name']).Revenue.sum().Margin.sum().OrderQuantity.sum()
  

Мне не удалось получить желаемый результат. есть ли что-то, на чем мне нужно сосредоточиться конкретно при использовании pyodbc?

Ответ №1:

Агрегат groupby — это то, что вы ищете:

Например:

 import numpy as np
import pandas as pd

d = {'Name': ['foo1','foo2','foo3','foo2','foo3'], 
'Business': ['bar2','bar3','bar1','bar1','bar1'],
    'ID':['1','2','3','4','5'],
    'Revenue':[10000,12500,7500,3000,15000],
    'Margin':[300,500,100,300,200],
    'Quanity':[1,2,2,3,4]}

df = pd.DataFrame(data=d)
  

Вывод df:

  Business ID  Margin  Name  Quanity  Revenue                                                                           
0     bar2  1     300  foo1        1    10000                                                                           
1     bar3  2     500  foo2        2    12500                                                                           
2     bar1  3     100  foo3        2     7500                                                                           
3     bar1  4     300  foo2        3     3000                                                                           
4     bar1  5     200  foo3        4    15000   
  

Затем с помощью groupby:

 groupby_df_agg = df.groupby(['Name'])[('Revenue', 'Margin', 'Quanity')].agg(['sum'])

print(groupby_df_agg)
  

Вывод

      Revenue Margin Quanity                                                                                             
         sum    sum     sum                                                                                             
Name                                                                                                                    
foo1   10000    300       1                                                                                             
foo2   15500    800       5                                                                                             
foo3   22500    300       6   
  

Для расширения с помощью более категориальных переменных вы можете использовать:

 groupby_df_agg = df.groupby(['Name','Business'])[('Revenue', 'Margin','Quanity')].agg(['sum'])
  

Вывод

               Revenue Margin                                                                                          
                  sum    sum                                                                                          
Name Business                                                                                                         
foo1 bar2       10000    300                                                                                          
foo2 bar1        3000    300                                                                                          
     bar3       12500    500                                                                                          
foo3 bar1       22500    300 
  

Комментарии:

1. Большое спасибо, это сработало красиво .. добавив к нему QQ.. Если мне нужно добавить еще один столбец «Бизнес» в условие группирования по, это не позволяет..

2. Как вы пытались его добавить?

3. groupby_df_agg = df.groupby([‘Имя’, ‘Бизнес’])[(‘Доход’, ‘Маржа’)].agg([‘сумма’]) это ритуал?

4. Какую версию python вы используете? Я только что добавил код, который использовал для добавления другой категориальной переменной и выходных данных. И можете ли вы описать, что вы имеете в виду, когда говорите «это не работает»? Это не дает вам желаемого результата? Или это сообщение об ошибке

5. Я использую Python 3.7.1.. Теперь это работает нормально.. произошла ошибка с соглашением об именовании столбцов. Что я заметил.. Теперь решение работает.. Большое спасибо за вашу помощь.. помог мне хорошо это понять…

Ответ №2:

Вы можете использовать агрегированный метод.

 df.groupby(['Name']).agg({'Revenue':'sum, 'Margin': 'sum', 'OrderQuantity':'sum'})
  

Ответ №3:

 import numpy as np
import pandas as pd

d = {'Name': ['James','Joe','James','James','Samuel'],
'Business': ['Commercial','Consumer','Commercial','Commercial','Commercial'],
    'Revenue':[1500,800,1900,1800,1800],
    'Margin':[100,10,110,105,105],
    'OrderQuanity':[1,1,2,3,1]}

df = pd.DataFrame(data=d)

groupby_df_agg = df.groupby(['Name','Business'])[('Revenue', 'Margin','OrderQuanity')].agg(['sum'])

print(groupby_df_agg)