我似乎找不到我的问题的任何具体答案,因为我不确定是否可以用
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)
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)