Python 将样式按行应用于数据帧

Python 将样式按行应用于数据帧,python,pandas,dataframe,formatting,Python,Pandas,Dataframe,Formatting,我正在用一个包含客户信息的数据集来试验/学习Python 数据帧结构如下(这些是由记录组成的): 将transpose方法应用于df1,我们得到以下视图: df2 = df1.T print(df2) 0 1 2 3 left_name James Mary John Patricia left_age 30 37 30 35 righ

我正在用一个包含客户信息的数据集来试验/学习Python

数据帧结构如下(这些是由记录组成的):

transpose
方法应用于
df1
,我们得到以下视图:

df2 = df1.T
print(df2)

                 0         1        2         3
left_name    James      Mary     John  Patricia
left_age        30        37       30        35
right_name  Robert  Jennifer  Michael     Linda
right_age       30        31       38        35
我的目标是对
df2
应用一些样式。具体来说,

  • left_name
    right_name
    行应以黄色突出显示
  • left_age
    right_age
    行应以蓝色突出显示
在这里发布之前,我做了一些研究,并通过以下方式突出显示了一个子集:

df2.style.set_properties(subset = pd.IndexSlice[['left_name', 'right_name'], :], **{'background-color' : 'yellow'})

问题是我无法将多种样式组合在一起。如果我使用与上面相同的方法为
left_age
right_age
添加额外的蓝色,我将“丢失”以前的样式


理想情况下,我希望有一个函数将
df2
作为输入并返回样式化的数据帧

您可以使用创建样式的数据框,并使用
loc
按索引值设置行:

def highlight(x):
    c1 = 'background-color: yellow'
    c2 = 'background-color: blue'

    df1 = pd.DataFrame('', index=x.index, columns=x.columns)
    df1.loc[['left_name','right_name'], :] = c1
    df1.loc[['left_age','right_age'], :] = c2
    return df1

df1.style.T.apply(highlight, axis=None)

您可以使用创建样式的数据框,并使用
loc
按索引值设置行:

def highlight(x):
    c1 = 'background-color: yellow'
    c2 = 'background-color: blue'

    df1 = pd.DataFrame('', index=x.index, columns=x.columns)
    df1.loc[['left_name','right_name'], :] = c1
    df1.loc[['left_age','right_age'], :] = c2
    return df1

df1.style.T.apply(highlight, axis=None)

你太接近了!实际上,您可以在同一数据帧上“链接”
设置\u属性

df2.style.set_properties(subset = pd.IndexSlice[['left_name','right_name'], :], **{'background-color' : 'yellow'})\
.set_properties(subset = pd.IndexSlice[['left_age','right_age'], :], **{'background-color' : 'blue'})


我相信有一个更优雅的解决方案-但这是可行的

你离得太近了!实际上,您可以在同一数据帧上“链接”
设置\u属性

df2.style.set_properties(subset = pd.IndexSlice[['left_name','right_name'], :], **{'background-color' : 'yellow'})\
.set_properties(subset = pd.IndexSlice[['left_age','right_age'], :], **{'background-color' : 'blue'})


我相信有一个更优雅的解决方案-但这是可行的

我知道一定有更好的办法。你总是教我一些东西!如果我执行上述操作,我将收到错误:AttributeError:'Styler'对象没有属性'T',我知道一定有更好的方法。你总是教我一些东西!如果我执行上述操作,我将收到错误:AttributeError:'Styler'对象没有属性'T'。事实上,我很接近!我有点偏爱耶斯雷尔的解决方案,但我也比你的方案投了更高的票。@VonKar,因为它的价值。。。我也喜欢他的解决方案,因为我很接近!我有点偏爱耶斯雷尔的解决方案,但我也比你的方案投了更高的票。@VonKar,因为它的价值。。。我也喜欢他的解决方案哈哈