Группировать по одному столбцу, но суммировать два других и считать третий столбец - PullRequest
0 голосов
/ 29 мая 2018

My df

df_RFQ_by_Salesperson = df[
                          (df['state'].str.contains('Done'))
                          ][['sales_person_name2',
                             'rfq_qty',
                             'rfq_qty_CAD_Equiv',
                             'state'
                            ]].copy()

display(df_RFQ_by_Salesperson.head(3))

    sales_person_name2  rfq_qty     rfq_qty_CAD_Equiv   state
14  AY                 200000.0     2.568713e+05        Done
22  AY                 1000000.0    1.284357e+06        Done
28  YJJ               25000000.0    4.420085e+07        Done

Я хотел бы groupby на df_RFQ_by_Salesperson, sum на rfq_qty, sum на rfq_qty_CAD_Equiv, но count на state тогдадобавить столбец в процентах на основе rfq_qty_CAD_Equiv.Я вычислил столбцы суммы и процента, но я не уверен, как зациклить счетчик состояния?

df_RFQ_by_Salesperson = df_RFQ_by_Salesperson.rename(columns={'state':'Done Trades'}, level=0) # rename the column header in the groupby
df_RFQ_by_Salesperson = df_RFQ_by_Salesperson.groupby(['sales_person_name2'])['rfq_qty','rfq_qty_CAD_Equiv'].sum() 
Total_Done_Volume = df_RFQ_by_Salesperson['rfq_qty_CAD_Equiv'].sum()
df_RFQ_by_Salesperson['Percentage'] = df_RFQ_by_Salesperson['rfq_qty_CAD_Equiv'].div(Total_Done_Volume)

display(df_RFQ_by_Salesperson.sort_values('Percentage',ascending=False))

sales_person_name2  rfq_qty     rfq_qty_CAD_Equiv   Percentage  Count of State      
MP                  214400000.0 3.045802e+08        0.258089        ?
AC                  228800000.0 2.648099e+08        0.224390        ?
YJJ                 202500000.0 2.490527e+08        0.211038        ?
RW                  129000000.0 1.693008e+08        0.143459        ?
AY                  118366000.0 1.189635e+08        0.100805        ?
RL                  78617000.0  7.342725e+07        0.062219        ?

Можно ли сделать подсчет в сочетании с суммой в одной группе?

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете объединить несколько столбцов с различными функциями, указав карту от имени столбца к функции:

out = df.groupby('sales_person_name2').agg(
 {'rfq_qty': 'sum', 'rfq_qty_CAD_Equiv': 'sum', 'state': 'size'}
)

, а затем рассчитать процент отдельно и назначить столбцу процента

out['percentage'] = out.rfq_qty_CAD_Equiv / out.rfq_qty_CAD_Equiv.sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...