基于 streamlit 的高亮行

问题描述 投票:0回答:1

我似乎找不到我的问题的任何具体答案,因为我不确定是否可以用

apply
applymap
来完成。

我有一个参数数据框,我们称之为

x
。我有一个原始数据框,我们称之为
y
.

  y = pd.DataFrame({"a": {"h":0.5,"x": 2, "y": 1}, "b": {"h":15,"x": 20, "y": 6}})
  x = pd.DataFrame({"thres1": {"x": 2, "h": 1,"y":3}, "thres2": {"x": 10, "h": 12,"y":3}})

x
提供阈值,如果原始数据的某些列超过,则需要突出显示该行。请注意,在给定行索引的情况下,
y
中的行需要与
x
中的正确行进行比较。在某些情况下,
x
的行数多于
y
,(但反之则不然,因此我们需要确保
.loc
匹配正确的行。

所以例如,我想比较原始数据帧

y
中的“b”列与原始数据帧
x
中的“thres2”列。对于“b”列中
y
的第一行,它是15。我需要将 15 与
x
的第二行第二列进行比较,即 12。因为它更大,所以我需要强调一下。

apply
应用整个数据框,而
applymap
逐个单元格。问题是我之前需要做 .loc 。如何在 streamlit 中为数据框设置样式? (最好不要 json)

python pandas styling streamlit
1个回答
0
投票

使用

Styler.apply
axis=None
传递整个 DataFrame,比较需要相同的列和索引标签,所以将
x.columns
重命名为
DataFrame.set_axis
:

import streamlit as st

highlight_greater = lambda z: np.where(z.gt(x.set_axis(z.columns, axis=1)),
                                       'background-color:red',
                                        '')
styled = df.style.apply(highlight_greater, axis=None)

st.table(styled)
© www.soinside.com 2019 - 2024. All rights reserved.