条件颜色列

2024-10-02 20:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据框如下所示:

Week    Item    Buyer   11  12  13  
0   clothes buyerID1    2   3   4   
1   food    buyerID2    2   1   1   
2   water   buyerID     7   5   1   

11、12、13是星期。我试图有条件地给最后一列的行上色,以描述每周购买的物品的变化。我在这里使用了another answer的改编来实现这一点,但我遇到了IndexingError: Too many indexers错误

下面是我修改过的代码:

def highlight3(x):
#if increase
c1 = 'background-color: green'

#if decrease
c2 = 'background-color: red'

c3 = ''

#last row greater than value in second to last row
m1 = x.iloc[:, -1] > x.iloc[:, -2]

#last row lesser than value in second to last row
m2 = x.iloc[:, -1] < x.iloc[:, -2]

out = np.select([m1, m2], [c1, c2], default=c3)
return pd.DataFrame(out, index=x.index, columns=x.columns)

然后我使用:df.apply(highlight3, axis=None)将其应用于我的df


Tags: toinifvaluecolorrowlastbackground
1条回答
网友
1楼 · 发布于 2024-10-02 20:31:08

这里有一个解决方案:

data = """Week    Item    Buyer   11  12  13  
0   clothes buyerID1    2   3   4   
1   food    buyerID2    2   1   1   
2   water   buyerID     7   5   1   """
df = pd.read_csv(StringIO(data), sep="\s+")

green = 'background-color: green'
red = 'background-color: red'

def style_last_week(x):
    s = pd.Series([""] * x.size)
    if x[-1] > x[-2]:
        s[x.size -1 ] = green

    if x[-2] > x[-1]:
        s[x.size -1 ] = red

    return s

df.style.apply(style_last_week, axis=1)

结果是:

enter image description here

相关问题 更多 >