前回の記事でデータフレームの書式設定をセル単位で設定する方法を紹介しました。
個々のセルの値だけで書式が決められうる場合はそれで十分なのですが、
実際の業務では列ごとの最大値や最小値などを目立たせたい場合がよくあります。
この場合、他のセルも参照しなければ書式を決められません。(厳密に言えば別途変数か何かを定義して実装できますが面倒です。)
このような時は、style.applymapの代わりに、style.applyを使います。
そして、渡す関数は、セルの値ではなく、DataFrameの行や列、つまりSeriesを受け取り、
CSS書式の配列を返す関数です。
引数axisに0(既定)を渡すと列ごと、1を渡すと行ごとに書式を設定できます。
試しに、最大値に色を塗ってみます。
def max_style(values):
max_value = max(values)
styles = [
"background-color: yellow" if value == max_value else ""
for value in values
]
return styles
# 適当なデータフレームを作成
df = pd.DataFrame(
np.random.randint(0, 100, size=(5, 3)),
columns=["col0", "col1", "col2"]
)
# 各列の最大値に着色 (axis=0 は省略可能)
print(df.style.apply(max_style).render())
col0 | col1 | col2 | |
---|---|---|---|
0 | 9 | 5 | 47 |
1 | 6 | 99 | 17 |
2 | 46 | 11 | 63 |
3 | 27 | 92 | 54 |
4 | 6 | 35 | 15 |
# 各行の最大値に着色
print(df.style.apply(max_style, axis=1).render())
col0 | col1 | col2 | |
---|---|---|---|
0 | 9 | 5 | 47 |
1 | 6 | 99 | 17 |
2 | 46 | 11 | 63 |
3 | 27 | 92 | 54 |
4 | 6 | 35 | 15 |
キャプチャ貼るのが面倒だったので、
結果はrender()で貼りました。