这是一个非常新手的问题,但是大多数教程都假设学生理解这一点,但我不是。我发现了这个熊猫格式样式的示例:
import fs from 'fs'
const FILE_NAME = '../assets/pies.json'
let pieRepo = {
get: () => {return new Promise((resolve, reject) => {
fs.readFile(FILE_NAME, (err, data) => {
if(err){
reject(err)
}
else{
resolve(JSON.parse(data))
}
})
})}
}
export default pieRepo
此函数绘制列中包含最大值的单元格。我不明白这是怎么回事。我知道这是一个广泛的问题,但是我真的很想了解此功能中的步骤。
答案 0 :(得分:3)
假设您具有以下随机数据帧
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(5,3), columns=list('ABC'))
df
现在,让我们看看您拥有的这个功能
def highlight_max(s):
is_max = s == s.max()
return ['background-color: green' if v else '' for v in is_max]
因此,基本上,此函数使用每一列并标记每一列的最大值。让我们将其应用于您的数据框并查看输出:
df.apply(highlight_max)
如您所见,我们还有另一个与df
相同大小的数据框。所有值都是空字符串,除了每列中的最大值具有字符串'background-color: green'
。
现在,我们将此新数据框应用于原始数据框,但具有样式功能。
df.style.apply(highlight_max)
就是这样。每个没有样式的单元格都与以前相同,每个带有'background-color: green'
的单元格都为绿色。
答案 1 :(得分:2)
该代码段直接来自大熊猫documentation,但是您剩下了一个至关重要的部分,那就是该函数的调用方式:
df.style.apply(highlight_max)
这是使用.style.apply
函数的,如果您不了解第一个文档页面,则会导致您查找Styler.apply
的文档。这些文档告诉我们:
逐列,逐行或逐表应用函数。
使用结果更新HTML表示形式。
它也说明了您要传递给它的功能(粗体部分是我的评论):
func
(即您的highlight_max
)应该取Series
或DataFrame
(取决于axis
)并返回形状相同的物体。
好的,现在让我们来看一下您的功能,我添加了类型提示以使其更清晰
def highlight_max(s: pd.Series) -> Sequence[str]:
is_max = s == s.max()
return ['background-color: green' if v else '' for v in is_max]
因此,此函数接受熊猫系列,并输出与该系列大小相同的字符串列表。它将包含CSS样式字符串,这些样式应该应用于显示熊猫表的HTML。特别是,您的函数将background-color属性设置为绿色。
假设您的表格有2列和3行。对于每一列,此函数都需要输出如下列表:
[
"",
"background-color: green",
"",
]
如果您希望该列的第二行为绿色。
但是您不希望在第二行使用此方法,而希望在包含该列最大值的任何行使用它。那么,您如何找到呢?一种方法是制作布尔序列
is_max = s == s.max()
这将构成一个这样的系列(我将以列表形式编写)(假设最大值位于第二行)
[
False,
True,
False,
]
这样可以处理is_max
。
下一行仅使用CSS将布尔系列转换为列表。如果您不知道那是什么,请使用[列表理解](https://www.programiz.com/python-programming/list-comprehension},然后再继续学习在线python基础课程。
但是让我们将其写为for循环:
css = []
for v in is_max:
if v: # same as if v is True
css.append("background-color: green")
else:
css.append("")
return css
顺便说一句,我感到奇怪的是,当我假设您可以使用熊猫的向量化时,熊猫文档决定为此使用循环:
is_max = s == s.max()
css = s.copy()
css[is_max] = "background-color: green"
css[~is_max] = ""