return df1.div(df1.sum(1), axis=0)

def maxu(df):
    pvt = df.assign(bins=pd.cut(df.Price, [0, 15, 30])).pivot_table(index=[
        'State', '# of Boxes'], columns='bins', aggfunc='size', fill_value=0)
Getting percentages after binning pandas dataframe