pd.crosstab(df.A,df.B, normalize='index') .round(4)*100 B A B C A one 33.33 33.33 33.33 three 33.33 33.33 33.33 two 33.33 33.33 33.33