我有一个数据框df,其中有客户ID,还有较便宜的打折商品或正常价格的商品。我想找到他们购买的顾客比例。
Customer Price_Type
1 Discount
1 Discount
1 Discount
1 DealerNet
1 DealerNet
1 DealerNet
2 DealerNet
2 DealerNet
2 DealerNet
2 DealerNet
预期输出为:
Customer at_Dicount at_DealerNet
1 50 50
2 0 100
我尝试了groupby函数,但没有得到我想要的。
答案 0 :(得分:5)
将crosstab
与normalize
一起使用,将100
乘以倍数并清除数据-将DataFrame.reset_index
与DataFrame.rename_axis
一起使用:
df1 = (pd.crosstab(df['Customer'], df['Price_Type'], normalize='index')
.mul(100)
.reset_index()
.rename_axis(None, axis=1))
print (df1)
Customer DealerNet Discount
0 1 50.0 50.0
1 2 100.0 0.0