我需要根据单元格的位置而不是单元格的内容在数据框中设置背景颜色。
考虑这个数据框:
np.random.seed(24)
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
想要的结果,对 excel 屏幕截图表示歉意:
我想根据位置选择特定范围的单元格:
bg_color_range = df.loc[1:3,'B':'C']
并将它们的背景设置为绿色:
def bg_green(x):
return 'background-color: lime'
df.style.applymap(bg_green, bg_color_range)
但这给出了 KeyError: "None of [Index(['B'], dtype='object')] are in the [index]"
,我不知道如何告诉 .style.applymap
操作的单元格范围。
答案 0 :(得分:2)
用apply
试试axis=None
:
def bg_green(df):
ret = pd.DataFrame('', index=df.index, columns=df.columns)
ret.loc[1:3, 'B':'C'] = 'background-color: lime'
return ret
df.style.apply(bg_green, axis=None)
输出:
答案 1 :(得分:2)
您可以将 applymap
的 subset
参数与 pd.IndexSlice
一起使用,例如:
df.style.applymap(bg_green, subset=pd.IndexSlice[1:3, 'B':'C'])