Reputation: 214
My dataframe looks like this:
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 are the weeks. I am trying to conditionally color the rows of the last column to depict a change in items purchased week over week. I am using an adaptation of another answer here to do so, but I am running into an IndexingError: Too many indexers
error.
Below is my modified code:
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)
And then I apply it to my df using: df.apply(highlight3, axis=None)
Upvotes: 0
Views: 214
Reputation: 12493
Here's a solution:
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)
The result is:
Upvotes: 1