【发布时间】:2019-11-23 01:40:21
【问题描述】:
我想在 multiIndex 的某个索引上设置 panda DataFrame 的样式。通常,pd.IndexSlice 应该按照this 的回答工作。
但是,如下图,这似乎行不通:
import pandas as pd
import itertools
import numpy as np
cv = ['data1_1','data1_2','data1_3']
param = ['data2_1', 'data2_2']
combi = tuple(itertools.product(cv,param))
columns = pd.MultiIndex.from_tuples(combi)
myData = pd.DataFrame(np.zeros((4,6), dtype=bool)*False, columns = columns)
myData.iloc[0,0] = True
def highligh(val):
if val == True:
color = 'red'
else:
color = 'white'
return 'background-color: {}'.format(color)
myColoredData = myData.style.apply(highligh, subset=pd.IndexSlice[:,pd.IndexSlice[:,'data2_2']])
import seaborn as sns
cm = sns.light_palette("green", as_cmap=True)
myColoredData2 = myData.style.background_gradient(cmap=cm, subset=pd.IndexSlice[:,pd.IndexSlice[:,'data2_2']])
myData.loc[pd.IndexSlice[:,pd.IndexSlice[:,'data2_2']]]
myColoredData.to_excel('colored.xlsx')
myColoredData2.to_excel('colored2.xlsx')
to_excel 方法给我一个错误:
不可散列的类型:'slice'
【问题讨论】:
-
我尝试重新创建您的示例,当我尝试显示
myColoredData时,它在myColoredData = myData.style.apply(highligh, subset=pd.IndexSlice[:,pd.IndexSlice[:,'data2_2']])部分之后中断了 -
似乎是熊猫样式问题,因为
myData.loc[pd.IndexSlice[:,pd.IndexSlice[:,'data2_2']]]有效...