#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)