Skip to content

Commit 82a102b

Browse files
authored
make levels consistent and name responsive (#43570)
Co-authored-by: JHM Darbyshire (MBP) <[email protected]>
1 parent 2276a50 commit 82a102b

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

pandas/io/formats/style.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -1814,7 +1814,7 @@ def set_sticky(
18141814
self,
18151815
axis: Axis = 0,
18161816
pixel_size: int | None = None,
1817-
levels: list[int] | None = None,
1817+
levels: Level | list[Level] | None = None,
18181818
) -> Styler:
18191819
"""
18201820
Add CSS to permanently display the index or column headers in a scrolling frame.
@@ -1827,7 +1827,7 @@ def set_sticky(
18271827
Required to configure the width of index cells or the height of column
18281828
header cells when sticking a MultiIndex (or with a named Index).
18291829
Defaults to 75 and 25 respectively.
1830-
levels : list of int
1830+
levels : int, str, list, optional
18311831
If ``axis`` is a MultiIndex the specific levels to stick. If ``None`` will
18321832
stick all levels.
18331833
@@ -1891,11 +1891,12 @@ def set_sticky(
18911891
else:
18921892
# handle the MultiIndex case
18931893
range_idx = list(range(obj.nlevels))
1894-
levels = sorted(levels) if levels else range_idx
1894+
levels_: list[int] = refactor_levels(levels, obj) if levels else range_idx
1895+
levels_ = sorted(levels_)
18951896

18961897
if axis == 1:
18971898
styles = []
1898-
for i, level in enumerate(levels):
1899+
for i, level in enumerate(levels_):
18991900
styles.append(
19001901
{
19011902
"selector": f"thead tr:nth-child({level+1}) th",
@@ -1920,7 +1921,7 @@ def set_sticky(
19201921

19211922
else:
19221923
styles = []
1923-
for i, level in enumerate(levels):
1924+
for i, level in enumerate(levels_):
19241925
props_ = props + (
19251926
f"left:{i * pixel_size}px; "
19261927
f"min-width:{pixel_size}px; "

pandas/tests/io/formats/style/test_html.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -365,11 +365,13 @@ def test_sticky_mi(styler_mi, index, columns):
365365

366366
@pytest.mark.parametrize("index", [False, True])
367367
@pytest.mark.parametrize("columns", [False, True])
368-
def test_sticky_levels(styler_mi, index, columns):
368+
@pytest.mark.parametrize("levels", [[1], ["one"], "one"])
369+
def test_sticky_levels(styler_mi, index, columns, levels):
370+
styler_mi.index.names, styler_mi.columns.names = ["zero", "one"], ["zero", "one"]
369371
if index:
370-
styler_mi.set_sticky(axis=0, levels=[1])
372+
styler_mi.set_sticky(axis=0, levels=levels)
371373
if columns:
372-
styler_mi.set_sticky(axis=1, levels=[1])
374+
styler_mi.set_sticky(axis=1, levels=levels)
373375

374376
left_css = (
375377
"#T_ {0} {{\n position: sticky;\n background-color: white;\n"

0 commit comments

Comments
 (0)