Применение нескольких функций к фрейму данных сводных таблиц (сгруппированных) - PullRequest
0 голосов
/ 24 сентября 2018

У меня в настоящее время есть фрейм данных, который выглядит следующим образом:

df:

 store  item  sales
0  1      1     10
1  1      2     20
2  2      1     10
3  3      2     20
4  4      3     10
5  3      4     15 
...

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

p_table = pd.pivot_table(df, index='store', values='sales', columns='item', aggfunc=np.sum)

, который дает что-то вроде:

     sales
item   1  2  3  4
store  
 1     20 30 10 8
 2     10 14 12 13
 3     1  23 29 10
....

Теперь я хочу применить некоторые функции, чтобы каждый общий объем продаж представлял процент от общего объема продаж для конкретного магазина.Например, значение для элемента 1 в store1 станет следующим:

1.    20/(20+30+10+8) * 100

Я пытаюсь сделать это для стекаемых данных.Любые предложения будут высоко оценены.

Спасибо

1 Ответ

0 голосов
/ 24 сентября 2018

Я думаю, нужно разделить на div с Series, созданным sum:

print (p_table)
item      1     2     3     4
store                        
1      10.0  20.0   NaN   NaN
2      10.0   NaN   NaN   NaN
3       NaN  20.0   NaN  15.0
4       NaN   NaN  10.0   NaN

print (p_table.sum(axis=1))
store
1    30.0
2    10.0
3    35.0
4    10.0
dtype: float64

out = p_table.div(p_table.sum(axis=1), axis=0)
print (out)
item          1         2    3         4
store                                   
1      0.333333  0.666667  NaN       NaN
2      1.000000       NaN  NaN       NaN
3           NaN  0.571429  NaN  0.428571
4           NaN       NaN  1.0       NaN
...