根据 python 中的其他列将列值设为粗体

Making column values bold based on other columns in python

我想弄清楚如何根据另一列中的值在我的 pandas 数据框中制作列值,特别是关于回归输出并使对应于低 p 值的系数加粗。我正在使用 python.

我有以下包含回归输出结果的数据框:

Model_run    Param_1    Param_2    Param_3   Param_1_pv   Param_2_pv   Param_3_pv 
----------------------------------------------------------------------------------- 
1               .453       .756       .945          .06          .04          .03 
2               .452       .336       .342          .04          .03          .22 
3               .264      .443        .044          .33          .05          .32 
4               .356       .543       .033          .01          .05          .14 
5               .234      .435        .032          .04          .03          .09 
... 

其中“Param”列指的是每个参数(自变量)的系数,pv 表示每个参数自变量的“P 值”。因此,我想将对应于 <= 0.05 的 p 值的系数值设为粗体。我会显示我想要的输出,但我认为此处的代码格式不允许您使用粗体。

如何在 python 中完成此操作?我已经看到我可以使用 .style.applymap(),但我对如何根据相应的 p 值列格式化系数感到困惑,因为大多数教程只展示如何格式化列本身。

您可以将 pandas.DataFrame.style.apply 与自定义函数一起使用。

def bold(v, props="", threshold=0.05):
    if v.name + "_pv" not in df:
        return np.full(v.shape, "")
    return np.where(df[v.name + "_pv"].le(threshold), props, "") 

df.style.apply(bold, props="font-weight: bold", axis=0, threshold=0.05)

解决方法:

def bold(v, threshold=0.05):
    if v.name + "_pv" not in df:
        return np.full(v.shape, "")
    return np.where(df[v.name + "_pv"].le(threshold), "font-weight: bold", "") 

df.style.apply(bold, axis=0, threshold=0.05)

输出:

洞察力:

该函数查找后缀为 _pv 的列,然后将该列与 threshold.

进行比较

如果未找到包含 _pv 的列,它将 return 一个空字符串数组,表示特定单元格不需要样式(在本例中为 font-weight: bold)。

如果找到带有 _pv 的列,它将应用 numpy.where 来制作一个与 props"" 混合的数组,以过滤掉需要设置样式的单元格应用。