uses pd.pivot_table instead of pd.DataFrame.pivot