Styl jest "nakładany" na DataFrame zatem Twoja funkcja powinna zwracać Styler.
Ten styl można potem wykorzystać.
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), columns=["A", "B"])
styler = df.style.apply(highlight_max, subset = ["A"], color='red', axis = 0)\
.apply(highlight_max, subset = ["B"], color='blue', axis=0)
# nowy DataFrame, ale korzystamy ze stylu poprzedniego
df2 = pd.DataFrame(np.random.randn(5, 2), columns=["A", "B"])
styler2 = df2.style.use( styler.export())
styler2
DataFrame ze stylu uzyskuje się:
styler2.data
Wciaz nie jest to na czym mi zalezy. Ponizej moj kod z komentarzami. Komenda use
zawsze zwraca Styler
zamiast df
a ja chce df
ale z nowym stylem tak zebym mogl go podawac jako argment do wielu funkcji i kazda z nich cos by w tym stylu zmieniala. W tym wypadku musialbym zamiast df
jako argument podawac style
a tego wolalbym nie robic
# Data
df = pd.DataFrame(np.random.randn(5, 2), columns=["A", "B"])
# Pierwsza funkcja ktora koloruje kolumne "A"
def f1(df):
# Najprosciej by bylo gdyby dalo sie zrobic cos takiego ale nie sie da:
# df.style = df.style.apply(highlight_max, subset = ["A"], color='red', axis = 0)
# Wiec tworze styler
styler = df.style
styler = styler.apply(highlight_max, subset = ["A"], color='red', axis = 0)
# Chce zeby funkcja zwrocila df ale ze zmienonym stylem. W tym momencie styler to odrebny obiekt.
# Niestety jak zwroce styler.data to dataframe nie ma tego stylu ktory wprowadzilem
# return styler.data
# Funkcje export i use nic mi nie daja bo wciaz jedyne co chce zwrocic to df ze zminionym stylem
# To zwraca styl, a nie dataframe ze zmienionym stylem
return df.style.use(styler.export())
# Wydaje mi sie ze moj cel jest prosty i dziwi mnie ze jest to takie trudne
# Druga funkcja ktora koloruje kolumne "B"
def f2(df):
df.style.apply(highlight_max, subset = ["B"], color='blue', axis = 0)
return df
res = f1(df)
type(res)