Pandas Window functions to calculate percentage for groupby

For each Location and Acquisition channel I would like to calculate the percentage. For example: The Digital acquisition channel in Milan makes up 33% of all customers in Milan and 24% of total spend across all acquisition channels in Milan

DF

city   acquisition_channel customers  spend
Milan  Digital             23         120
Milan  Organic             35         324
Milan  Email               12         53
Paris  Digital             44         135
Paris  Organic             24         252
Paris  Email               10         47

Desired Output DF

city   acquisition_channel customers  spend
Milan  Digital             33%         24%
Milan  Organic             50%         65%
Milan  Email               17%         11%
Paris  Digital             56%         31%
Paris  Organic             31%         58%
Paris  Email               13%         11%

This is what I have tried so far, but this is not giving me the desired result

df.groupby(["acquisition_channel","city"])\
.agg({"customers": "sum", "spend" : "sum"})[["customers", "spend"]]\
.apply(lambda x: 100*x/x.sum())\
.sort_values(by=["customers","spend"], ascending=[False,False])


from Recent Questions - Stack Overflow https://ift.tt/34tPR6x
https://ift.tt/eA8V8J

Comments

Popular posts from this blog

Today Walkin 14th-Sept

Spring Elasticsearch Operations

Hibernate Search - Elasticsearch with JSON manipulation