df.pivot_table(values='col1', index='col2', aggfunc=[np.median, np.mean])  # index can also be list of columns

# other way
df.pivot_table(values='col1', index='col2', columns='col3', fill_value=0, margins=True)  # margins for summary statistic