转置 pandas 样式器

Transpose pandas Styler

我想设计我的数据样式以进行一些数据分析。这适用于我最近才发现的 df.style。然而,我似乎遗漏了一个关键方面:如何在 应用方法后转置 Styler ?当您想将列名与 subset 方法一起使用时,这很有用。

所以,下面的代码运行良好;它为 A 和 C 列中的单元格着色。现在我想转置轴以便得到四行(并删除索引)。

import numpy as np
df2 = pd.DataFrame(np.random.randn(10,4), columns=["A", "B", "C", "D"])

def set_style(v):
    if v > 0:
        return "background-color: #ff887c;"
    elif v < 0:       
        return "background-color: #93d9ad;"
    
df2.style.format(precision=2).applymap(set_style, subset=["A", "C"]).hide_columns()

不幸的是,添加 .T 不起作用,因为

'Styler' object has no attribute 'T'

有没有办法做到这一点,即在完成所有其他处理后转置 Styler 对象?

不完全正确,但 pd.DataFrame.style 可以被认为是 HTML 格式的字符串,因此它没有转置运算符。

您可以转置数据并使用 pd.IndexSlice 对行进行切片:

df2.T.style.applymap(set_style, subset=pd.IndexSlice[['A','C'],:])

或者您可以重新编写函数以获取行并检查名称:

def set_style_row(r, sub=[]):
    if r.name in sub:
        return np.where(r>0, "background-color: #ff887c;", "background-color: #93d9ad;")
    return [''] * len(r)

df2.T.style.apply(set_style_row, axis=1, sub=['A','C'])

输出: