我希望基于两个函数创建自己的样式条件:我想要一个背景颜色和大小row_height。
为此我定义了2个样式函数
def resistance(s):
color='#fcdcdc' if s.interpretation=='Resistant' else ''
return ['background-color: {}'.format(color)]*len(s)
def null_row(s):
size=1px if s.interpretation=='' else size=12px
return ['line-height: {}'.format(color)]*len(s)
df_style=df.style.
apply(resistance,axis=1).
apply(height,axis=1)
st.table(df_style)
st.dataframe(df_style)
除了line_height从来没有改变空行,似乎不工作(没有错误消息)。同样的,当我采取一个任意的非空条件或尝试大小每一行的高度1px
这是一个问题与流光或与我的代码?
Thanks for help
根据pd.style的文档。应用时,样式函数需要返回实际数据,而不仅仅是格式化指令。
function - function
函数应该接受一个Series if轴在[0,1]内,并返回一个相同长度的类列表对象,或者一个Series,不一定相同长度;具有考虑子集的有效索引标签。Func应该取a如果axis为None,则返回一个具有相同属性的数组shape或DataFrame,不一定具有相同的形状,具有valid考虑子集的索引和列标签
示例代码如下:
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"])
df.style.apply(highlight_max, color='red')
df.style.apply(highlight_max, color='blue', axis=1)
df.style.apply(highlight_max, color='green', axis=None)
你需要使你的函数适应你想要达到的目的,并返回你真正想要格式化的数据。
正确使用的属性是height
而不是line-height
。
您的null_row
函数的名称与您正在调用的名称不同:height
。
不幸的是,处理整个行要困难得多,而且Streamlit也不尊重所有的CSS样式参数(参见隐藏索引主题)。因此,我不确定是否可以将行高度设置为1px。从显示的数据框中删除该行是否可行?你可以用df[df["interpretation"] == ""]
。
如果我正确理解了你想要做的事情,这应该是正确的代码:
def resistance(x, color):
return np.where(x=='Resistant', f"background-color: {color};", None)
def null_row(x):
return np.where(x=='', "height: 12px;", "height: 1px;")
df = pd.DataFrame(columns=["interpretation"], data=[[""], ["Resistant"], [""], ["Resistant"]])
df_style = df.style.apply(resistance, color='#fcdcdc').apply(null_row)
st.table(df_style)