我试图使用.style
对实际数字小于'Budget'
列的记录进行有条件的格式化。
我尝试使用以下代码:
percent_scrap = (percent_scrap.style
.format("{0:,.2f}%")
.apply(lambda x: x == 'background-color: red'
if x > x['Bud Yield']
else '',
axis = 1
)
)
但是lambda函数会产生错误:
系列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
我尝试创建一个“掩码”数据格式,将False
映射到'background-color: red'
,然后将其传递给style
函数,但也想不出如何正确地做到这一点。
我肯定还有更好的办法。
期望产出:
发布于 2022-08-22 12:43:59
您的lambda函数混合返回一个元素和一个数组对象的测试,因此出现了错误。
你最好使用这样的方法:
styler.apply(lambda s: np.where(s>df["budget"], "color:red", None), axis=0)
这将将每一列计算为一个系列,即s
,与dataframe列budget
进行比较,并返回要应用于每一列的样式数组。
可以修改apply
方法以排除budget
列:
styler.apply(lambda s: np.where(s>df["budget"], "color:red", None), axis=0, subset=[col for col in df.columns if col != "budget"])
发布于 2022-08-23 03:54:19
我终于想明白了:
percent_scrap = (percent_scrap.style
.apply(lambda x: ["color:red; font-weight:bold" if v < x.iloc[-1] and v != 0 else "" for v in x],axis = 1)
.format("{0:,.2f}%")
)
这使我能够根据最后一列中的值格式化dataframe中的所有列。
https://stackoverflow.com/questions/73438775
复制