df.groupby('col1')[['col2']].mean()
Способ 1
df.groupby(['col1', 'col2'])['col3'].aggregate('mean').unstack()
или
df.groupby(['col_left', 'col_high'])['col_value'].aggregate('mean').unstack()
Способ 2
df.pivot_table('col3', index='col1', columns='col2')
df.pivot_table('col_value', index='col_left', columns='col_high')
Разделение на категории, диапазоны, градации
category = pd.cut(df['category'], [0, 10, 20])
чтобы добавить в столбец
df['col_category'] = pd.cut(df['col1'], [0, 10, 20])
Многоуровневая таблица
df.pivot_table('col_value', ['col_left', category], 'col_high')
http://datareview.info/article/svodnyie-tablitsyi-v-python/
https://stackoverflow.com/questions/37148787/pandas-pivot-table-percent-...