離散変数のあるデータセットにおいて、グループ分けをしてデータの傾向を見たいとき、groupby()やpivot_table()を使います。
離散変数が1つならgroupby()、離散変数が2つならpivot_table()を使います。
使用するデータ
説明のために、次のようなデータを作ります。
ドラクエⅢのルイーダの酒場にいる仲間リストを空想で作ったものです。「職業」と「性別」が離散変数、「人気度」が連続変数になります。

groupby()は離散変数が1つのときに使う
1つの離散変数に基づいてグルーピングするときは、groupby()を使います。
例えば、「職業」に基づいてgroupbyをしてみます。

職業ごとの人気度の平均値を抽出できました。
「性別」に基づいたgroupbyもやってみます。

mean()の代わりにmax()やmin()を使うことで、平均ではなく最大値、最小値を抽出することができます。また、describe()を使うことで、さまざまな量を一括で表示させることも可能です。

groupbyの結果を可視化する場合は、棒グラフがよく使われます。

このように、1つの離散変数に対して、連続変数の情報(平均値など)をグループ分けして表示させるのがgroupby()の機能です。
pivot_table()は離散変数が2つのときに使う
2つの離散変数に基づいてグルーピングするときは、pivot_table()を使います。
「職業」と「性別」に基づいてpivot_tableをしてみます。
行(index)、列(columns)、表に入れるデータ(values)、表に入れるデータの詳細(aggfunc)を指定します。

女性の僧侶、男性の戦士に人気が集まっていることがわかります。
pivot_tableの結果を可視化する場合は、ヒートマップがよく使われます。

ちなみに、annotとはヒートマップ上に数値を記載するかどうか、cmapはカラーマップの略で「色合い」を、fmtはフォーマットの略で「数値の表記方法」を指定します。
詳しくは、こちらをご参照ください。

ビニング処理をして連続変数を離散変数に変えてから、グルーピングする
連続変数を離散変数に変えてからグルーピングする方法もよく行われます。
離散変数に変えることをビニング(binning)といいます。binとは棒グラフの棒のことです。連続変数を棒グラフの棒(離散変数)にしましょうということです。
次のように年齢情報を追加したデータでビニングをやってみます。

連続変数である「年齢」を離散変数に変えるにはcutやqcutが使われます。
等間隔で分割するのがpd.cut()です。

18.954〜34.333歳、34.333〜49.667歳、49.667〜 65.0歳の3カテゴリーに分類してくれました。
分割するしきい値を指定することもできます。

また、ラベルをつけることも可能です。

qcutを使うと、分割後のカテゴリーに含まれるデータ数が等しくなるようにしてくれます。

最後に、「年齢」を離散化したものに上書きして、groupbyをやってみましょう。

うまくできました。