Styler.apply(func, axis=0, subset=None, **kwargs)[source]

Apply a CSS-styling function column-wise, row-wise, or table-wise.

Updates the HTML representation with the result.


func should take a Series or DataFrame (depending on axis), and return an object with the same shape. Must return a DataFrame with identical index and column labels or an ndarray with same shape as input when axis=None.

Changed in version 1.3.0.

axis{0 or ‘index’, 1 or ‘columns’, None}, default 0

Apply to each column (axis=0 or 'index'), to each row (axis=1 or 'columns'), or to the entire DataFrame at once with axis=None.


A valid indexer to limit data to before applying the function. Consider using a pandas.IndexSlice.


Pass along to func.



The output of func should be elements having CSS style as string or, if nothing is to be applied to that element, an empty string or None. The output shape must match the input, i.e. if x is the input row, column, or table (depending on axis), then func(x).shape == x.shape should be True.

This is similar to DataFrame.apply, except that axis=None applies the function to the entire DataFrame at once, rather than column-wise or row-wise.


>>> def highlight_max(x, color):
...     return np.where(x == np.nanmax(x.to_numpy()), f"color: {color};", None)
>>> df = pd.DataFrame(np.random.randn(5, 2))
>>>, color='red')
>>>, color='blue', axis=1)
>>>, color='green', axis=None)