<p>首先,你的问题中有几个问题:</p>
<ol>
<li><p>您的数据不一致:为生成<code>df</code>而提供的代码包含一些混合了浮点数的字符串。如果数据中确实存在这种情况,则首先应将all转换为float:</p>
<p>df=df.应用(pd.到数值)</p></li>
<li><p>你的<code>guidelines</code>在整个帖子中都会发生变化。例如:</p></li>
</ol>
<p>你从指导方针开始</p>
<pre><code>WHO= {'Cd' :0.002 ,'Cu' :0.003 ,'SO4':"NaN,'Zn' :0.1} # string `NaN` again?
ANZECC= {'Cd' :0.001 ,'Cu' :0.002 ,'SO4':1000.0,'Zn' :0.2}
US_EPA= {'Cd' :0.001 ,'Cu' :0.0015 ,'SO4':500.0,'Zn' :0.01}
</code></pre>
<p>然后,稍后构建<code>guidelines</code>数据帧,您一定也错误地将其命名为<code>df</code>,如下所示:</p>
<pre><code># no string `NaN`
# Sulphate or SO4
# different standard names
guidelines={"CEPA_FW": {'Sulphate':1000,'Cd' :0.01 ,'Cu' :1.0 ,'Pb' :0.005 ,'Zn' :5.0},
"ANZECC_Stock":{'Sulphate':1000,'Cd' :0.01,'Cu' :0.4, 'Zn' :20},
"ANZECC_FW": {'Sulphate':1000,'Cd' :0.0002 ,'Cu' :0.0014 ,'Pb' :0.0034 ,'Zn' :0.008}}
</code></pre>
<p>这与前者完全不同</p>
<hr/>
<p>也就是说,让我们根据您的图片构建一个新的<code>guidelines</code>和<code>fill_color</code>:</p>
<pre><code>guidelines = {'WHO' : {'Cd' :0.002 ,'Cu' :0.003 ,'SO4':np.NaN,'Zn' :0.1},
'ANZECC' : {'Cd' :0.001 ,'Cu' :0.002 ,'SO4':1000.0,'Zn' :0.2},
'US_EPA' : {'Cd' :0.001 ,'Cu' :0.0015 ,'SO4':500.0,'Zn' :0.01}
}
guidelines = pd.DataFrame(guidelines).T
fill_color = {'WHO':'teal',
'US_EPA' :'yellow',
'ANZECC': 'green'}
</code></pre>
<p>下面是函数:</p>
<pre><code>def hightlight(col):
name = col.name
# extract the threshold and sort decreasingly
thresh = guidelines[name].sort_values(ascending=False)
# compare each value in column to each threshold
compare = np.greater_equal.outer(col.values, thresh.values)
# if any threshold is exceeded
exceed_thresh = compare.any(1)
# and where it is exceeded
exceed_idx = np.argmax(compare, axis=1)
# extract the standards that has is passed
standards = np.where(exceed_thresh, thresh.index[exceed_idx], '')
# format strings
return [f'background-color:{fill_color[s]}' if s else '' for s in standards ]
df.style.apply(hightlight)
</code></pre>
<p>输出:</p>
<p><a href="https://i.stack.imgur.com/ZKM6K.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ZKM6K.png" alt="enter image description here"/></a></p>