【问题标题】:Making column values bold based on other columns in python根据python中的其他列使列值加粗
【发布时间】:2021-09-27 01:03:53
【问题描述】:

我试图弄清楚如何根据另一列中的值在我的 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 
... 

其中“参数”列指的是每个参数(自变量)的系数,pv 表示每个参数自变量的“P 值”。所以我想让系数值对应于

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

【问题讨论】:

    标签: python format conditional-statements styles bold


    【解决方案1】:

    您可以将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 的列,它将返回一个空字符串数组,表示特定单元格不需要样式(在本例中为font-weight: bold)。

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

    【讨论】:

    • 这正是我想要做的,但不幸的是它不适用于我的实际研究数据。我尝试了您的代码,但刚刚收到错误消息:“TypeError: (“bold() got an unexpected keyword argument 'props'”, 'occured at index Color')” 其中“Color”指的是我的附加列之一在我的数据框中,这让我感到困惑。你知道我该如何解决这个问题吗?
    • 我也有点困惑该函数如何知道如何将参数与其对应的 p 值匹配,例如参数1的系数对应参数1的p值,参数2的系数对应参数2的p值等?
    • 您使用的是哪个版本的熊猫?您可以删除 props 部分并在函数中使用它。 bold 使用系列的名称来查找它的匹配器:当收到 Param_1 时,它通过添加 _pv 并检查该名称是否存在于数据中来寻找 Param_1_pv。检查解决方法并告诉我。
    • 您的建议工作完美,谢谢。虽然我注意到我无法更改“Param_X”列的名称,但我想在保持加粗的同时这样做。那可能吗?我现在猜,因为这会改变引用条件语句所依赖的名称。
    猜你喜欢
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多