我目前有一个看起来像这样的数据框:
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
....
我现在要做的是应用一些功能,以便每个商品的总销售额代表特定商店的总销售额的百分比。例如,store1中项目1的值将变为:
1. 20/(20+30+10+8) * 100
我正在努力为堆叠数据帧执行此操作。任何建议将不胜感激。
谢谢
答案 0 :(得分:1)
我认为需要用Series
创建的sum
除以div
:
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