Python:样式列标题

Python:样式列标题,python,pandas,pandas-styles,Python,Pandas,Pandas Styles,我正在使用根据列标题的名称为某些列指定背景色。 虽然这可以按预期工作,但列标题的背景色不会更改 以下是我的脚本中应用您的风格的部分: def高亮显示颜色(x): 如果x.name在添加的_列中: 返回['background-color:#67c5a4']*x.shape[0] 删除的列中的elif x.name: 返回['background-color:#ff9090']*x.shape[0] 其他: return['background-color:None']*x.shape[0] ol

我正在使用根据列标题的名称为某些列指定背景色。 虽然这可以按预期工作,但列标题的背景色不会更改

以下是我的脚本中应用您的风格的部分:

def高亮显示颜色(x):
如果x.name在添加的_列中:
返回['background-color:#67c5a4']*x.shape[0]
删除的列中的elif x.name:
返回['background-color:#ff9090']*x.shape[0]
其他:
return['background-color:None']*x.shape[0]
old=old.style.apply(高亮显示列,轴=0)
是否有一种方法不仅将应用于列标题下的单元格,而且应用于包括列标题在内的完整列

编辑: 以下是excel输出的屏幕截图,以供澄清:


“标题2”的背景颜色应与下面的单元格相同。

好的,我想我找到了一种使用html“选择器”格式化列标题的方法:

将大部分代码用作设置:

df = pd.DataFrame('some value', columns=['Header1','Header2','Header3'], index=np.arange(12))
added_columns = 'Header2'
dropped_columns = 'Header1'

def highlight_col(x):
    if x.name in added_columns:
        return ['background-color: #67c5a4']*x.shape[0]
    elif x.name in dropped_columns:
        return ['background-color: #ff9090']*x.shape[0]
    else:
        return ['background-color: None']*x.shape[0]


col_loc_add = df.columns.get_loc(added_columns) + 2
col_loc_drop = df.columns.get_loc(dropped_columns) + 2

df.style.apply(highlight_col, axis=0)\
  .set_table_styles(
     [{'selector': f'th:nth-child({col_loc_add})',
       'props': [('background-color', '#67c5a4')]},
     {'selector': f'th:nth-child({col_loc_drop})',
       'props': [('background-color', '#ff9090')]}])
输出:


注意:我使用的是f-string,它是Python 3.6+的一项功能。

您可以使用
np.vstack()
如下堆叠列名,并创建一个新的数据框来应用函数,然后使用
header=False导出到excel:

使用@Scott的数据和piR的函数, 设置:


你可以做:

pd.DataFrame(np.vstack((df.columns,df.to_numpy())),columns=df.columns).style.apply(
                  f,subset=['Header2']).to_excel('file.xlsx',header=False,index=False)

excel文件的输出:

要查看列标题,请使用
df.style.set\u table\u styles
。是否可以显示预期输出的示例图像?@ScottBoston在我的UND中重新启动set\u table\u styles会更改所有标题,但我只想更改特定的标题。我还添加了一个截图。好的。我添加了一个解决方案。谢谢,但遗憾的是它不起作用。导出的excel文件仍然只对不带标题的列进行着色。你知道其他的方法吗?是的,这似乎是错误。参考了这篇文章
pd.DataFrame(np.vstack((df.columns,df.to_numpy())),columns=df.columns).style.apply(
                  f,subset=['Header2']).to_excel('file.xlsx',header=False,index=False)