Python 如何从透视表中的样式(子集)中排除总行(边距)

Python 如何从透视表中的样式(子集)中排除总行(边距),python,pandas,formatting,pivot-table,margins,Python,Pandas,Formatting,Pivot Table,Margins,我有一个.pivot\u表格,边距=True 我想在其上运行.style.bar和.style.background\u渐变,但问题是边距列总计也被格式化并设置为最大值,因此看起来不具有描述性 关于如何解决这个问题,我有一些想法,但是,到目前为止,还没有一个可行: 尝试使用子集从.style中排除最后一行的边距/总列,但失败。 在单独的数据框中保存最后一行。从原始数据帧中删除最后一行,应用.style,然后连接两个数据帧,但是,这里出现了一个错误,我无法连接已设置样式的数据帧。 代码如下: im

我有一个.pivot\u表格,边距=True

我想在其上运行.style.bar和.style.background\u渐变,但问题是边距列总计也被格式化并设置为最大值,因此看起来不具有描述性

关于如何解决这个问题,我有一些想法,但是,到目前为止,还没有一个可行:

尝试使用子集从.style中排除最后一行的边距/总列,但失败。 在单独的数据框中保存最后一行。从原始数据帧中删除最后一行,应用.style,然后连接两个数据帧,但是,这里出现了一个错误,我无法连接已设置样式的数据帧。 代码如下:

import pandas as pd
import numpy as np
import seaborn as sns

df = pd.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo",
                      "bar", "bar", "bar", "bar"],
                "B": ["one", "one", "one", "two", "two",
                      "one", "one", "two", "two"],
                "C": ["small", "large", "large", "small",
                      "small", "large", "small", "small",
                     "large"],
                "D": [1, 2, 2, 3, 3, 4, 5, 6, 7]})

df = df.pivot_table(values='D', index=['A','B'], columns=['C'], aggfunc=np.sum, margins=True, fill_value = 0)

df = (df.style.background_gradient(subset = 'large', cmap = sns.light_palette('red', as_cmap = True))
      .background_gradient(subset = 'small', cmap = sns.light_palette('green', as_cmap = True)))
df

因此,我们的目标是将最后一行排除在所有/Margins/Total列的格式之外。

您必须更明确一点,但您可以通过get_level_值和pd.indexlice来完成所需的任务


您必须更明确一点,但您可以通过get_level_值和pd.indexlice完成所需的工作


正是我需要的!非常感谢。所有列都是这样做的:dft1.style.background\u gradientcmap='Blues',axis=0,subset=pd.indexlice[u[:-1],:]正是我所需要的!非常感谢。对于所有这样的列:dft1.style.background\u gradientcmap='Blues',axis=0,subset=pd.indexlice[u[:-1],:]
u = df.index.get_level_values(0)

(df.style.background_gradient(
  subset = pd.IndexSlice[u[:-1], 'large'],
  cmap = sns.light_palette('red', as_cmap = True))
.background_gradient(
  subset = pd.IndexSlice[u[:-1], 'small'],
  cmap = sns.light_palette('green', as_cmap = True)))