我有以下数据框,并希望将其转换为HTML
Limit Status Warning 3M AVG
VAR1 1.20 1.21216 1.11 1.21235
VAR2 0.82 0.63075 0.75 0.593295
VAR3 0.38 0.376988 0.35 0.376988
VAR4 0.17 0.126987 0.14 0.12461
我想逐行格式化此数据框,以使:
Status
超过Warning
,则整个行将突出显示为黄色,如果超过Limit
,则整个行将突出显示为红色VAR2
行和VAR3
行具有“ {:.2%}”格式,VAR1
和VAR4
行具有“ {:.2f}” 我已经研究了熊猫文档,并尝试了几种方法,但无法完成上述所有任务
如果您能提供帮助,我们将不胜感激,因为我认为这对许多熊猫用户来说,逐行格式化数据框是一项挑战。
编辑1:我尝试了以下代码:
df=df.transpose()
df.style.format("{:.2%}").format({"VAR1":"{:.2f},"VAR4":"{:.2f}"})
注意:通过转置数据框,可以轻松完成所有任务,但由于它是样式器,因此我无法将其转回其原始形状。
答案 0 :(得分:1)
我认为您可以使用自定义的Styling函数来完成您想做的事情:
@FeignClient(name="mysvc", path="/mysvc")
public interface MyService {
...
}
@RestController
@RequestMapping("/")
public class MyServiceController implements MyService {
...
}
# application.properties
server.servlet.context-path=/mysvc
不过,您仍然必须为此添加自定义数字格式。
要获取此代码,请使用def color(row):
if row.Status >= row.Limit:
return ['background-color: red'] * len(row)
elif row.Status >= row.Warning:
return ['background-color: yellow'] * len(row)
return [''] * len(row)
df.style.apply(color(), axis=1)
方法:
render
df.style.apply(color(), axis=1).render()
答案 1 :(得分:1)
我遇到了同样的问题,并研究了format
类中pandas.io.formats.style.Styler
函数的实现,并实现了类似的按行函数:
def format_row_wise(styler, formatter):
for row, row_formatter in formatter.items():
row_num = styler.index.get_loc(row)
for col_num in range(len(styler.columns)):
styler._display_funcs[(row_num, col_num)] = row_formatter
return styler
示例:
df = pandas.DataFrame(
{
'Limit': [1.20, 0.82, 0.38, 0.17],
'Status': [1.21216, 0.63075, 0.376988, 0.126987],
'Warning': [1.11, 0.75, 0.35, 0.14],
'3M AVG': [1.21235, 0.593259, 0.376988, 0.12461]
},
index=['VAR1', 'VAR2', 'VAR3', 'VAR4']
)
formatters = {"VAR1":lambda x: f"{x:.2f}", "VAR4": lambda x: f"{x:.2f}"}
styler = format_row_wise(df.style, formatters)
styler.render()
这对我有用:)
注意:
希望这能使您走对路...