首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多索引的Pandas样式对象

具有多索引的Pandas样式对象
EN

Stack Overflow用户
提问于 2017-01-19 17:30:07
回答 4查看 9.7K关注 0票数 15

我正在用样式器格式化一个熊猫数据帧,以突出显示列和格式化数字。我还想应用多个索引,以便更清晰,更愉快,更容易阅读。由于我将Styler应用于列的子集,因此它不适用于多索引。

示例:

代码语言:javascript
运行
复制
arrays = [np.hstack([['One']*2, ['Two']*2]) , ['A', 'B', 'C', 'D']]
columns = pd.MultiIndex.from_arrays(arrays)
data =  pd.DataFrame(np.random.randn(5, 4), columns=list('ABCD'))
data.columns = columns 
import seaborn as sns
cm = sns.light_palette("green", as_cmap=True)
data.style.background_gradient(cmap=cm, subset=['A'])

有没有一种方法可以子集这些列,以便样式器可以工作。根据以下来源,这是实现的,但没有示例,所以我很难理解如何应用它:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.formats.style.Styler.html https://github.com/pandas-dev/pandas/issues/11655

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2017-01-19 17:53:09

我认为你可以使用pd.IndexSlice[...]方法:

代码语言:javascript
运行
复制
data.style.background_gradient(cmap=cm, subset=pd.IndexSlice[:, pd.IndexSlice[:, 'A']])

演示:

代码语言:javascript
运行
复制
In [5]: data.loc[pd.IndexSlice[:, pd.IndexSlice[:, 'A']]]
Out[5]:
        One
          A
0 -0.808483
1  0.009371
2  0.977138
3 -0.875554
4 -0.052424

In [6]: data
Out[6]:
        One                 Two
          A         B         C         D
0 -0.808483 -2.280683  0.576145  0.649688
1  0.009371  0.721510  1.013764 -0.157493
2  0.977138  1.441392  1.718618 -0.320826
3 -0.875554 -1.060507  1.457075  0.570195
4 -0.052424 -0.742842 -0.203830 -1.202091

在Jupyter:

票数 16
EN

Stack Overflow用户

发布于 2019-07-23 03:23:40

下面是另一种方法:

代码语言:javascript
运行
复制
data.style.background_gradient(cmap=cm, subset=data.columns.get_loc_level('A', level=1)[0])

输出:

票数 9
EN

Stack Overflow用户

发布于 2019-06-02 11:26:03

如果你知道索引的层次结构,例如'A‘在'One’下,你可以使用一个元组来引用该列。

代码语言:javascript
运行
复制
data.style.background_gradient(cmap=cm, subset=[('One','A')])

然后,该表将显示如上。

如果要使用多索引设置多个列的样式,则需要提供元组列表(即

代码语言:javascript
运行
复制
arrays = [np.hstack([['One']*2, ['Two']*2]) , ['A', 'B', 'C', 'D']]
columns = pd.MultiIndex.from_arrays(arrays)
data =  pd.DataFrame(np.random.randn(5, 4), columns=list('ABCD'))
data.columns = columns 
cm = sns.light_palette("green", as_cmap=True)
data.style.background_gradient(cmap=cm, subset=[('One','A'),('Two','C')])

显示如下所示

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41738175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档