PandasのデータフレームをJupyter Notebook上でテーブル表示する際、セルに色をつけたいケースがあります。
具体的にはこんな風にしたい時です。
このテーブルは TOPIXコア30採用銘柄の毎月のベストとワーストパフォーマーを色付けしたものです。 例えば、今年の4月の騰落率でみると、任天堂が+17.10%でコア30銘柄中のベストパフォーマー、武田薬が-8.74とワーストになっています。
セルに色をつける事ができるとは聞いた事がありましたが、実際にどうするのか知らなかったので調べてみました。
まず、Pandas公式にはStylingを使うとあります。
よく読むと、やりたいことはカラム毎(毎月)に最大値、最小値を見つける関数を適用する
のようです。
コードにすると下記のようになります。
- データフレームの1つのカラムを指すデータ構造であるSeriesに対して、series.max()で最大(小)値を見つけ、最大(小)値でなければtrueで色付け(background-color)、そうでなければ何もしないという関数を作る。
def highlight_highest_on_each_month(series): is_max = series == series.max() return ['background-color: #FC6C4D' if v else '' for v in is_max] def highlight_lowest_on_each_month(series): is_min = series == series.min() return ['background-color: #5B60F8' if v else '' for v in is_min]
is_max = series == series.max()
の部分が直感的にわからない感じがしますが、
is_max = series == series.max() print(is_max)
でboolのSeriesを生成しています。
- メソッドチェーンを使ってそれぞれの関数をapplyしてあげます。
df = df.style.apply(highlight_highest_on_each_month).apply(highlight_lowest_on_each_month)
- htmlファイルとして書き出します。
with open("df.html","w", encoding='utf-8') as f: f.write(df.render())
書き出したあとは、cssを調整するなどして見栄えを整えてあげればいいと思います。
参考記事
- 作者: 池内孝啓,片柳薫子,岩尾エマはるか,@driller
- 出版社/メーカー: 技術評論社
- 発売日: 2017/09/09
- メディア: 大型本
- この商品を含むブログ (1件) を見る