Python ValueError:(';系列长度必须匹配,才能在使用Pandas样式时进行比较

Python ValueError:(';系列长度必须匹配,才能在使用Pandas样式时进行比较,python,html,pandas,dataframe,Python,Html,Pandas,Dataframe,通过使用,我试图用条件格式突出显示已从数据帧(如下所示)中子集(按行和按列)的单元格: 例如,在对第0行和第1行以及第“Adam”列和第“Gill”列中的单元格进行子集设置后,如果这些单元格的值大于其相应的目标值,我想将其高亮显示为绿色,如果值小于目标值,则高亮显示为橙色 但是,在运行代码时,我不断遇到以下错误: ValueError:(“序列长度必须匹配才能进行比较”,u出现在索引0') 我能做些什么来解决这个问题 这是我的代码: import pandas as pd def Above

通过使用,我试图用条件格式突出显示已从数据帧(如下所示)中子集(按行和按列)的单元格:

例如,在对第0行和第1行以及第“Adam”列和第“Gill”列中的单元格进行子集设置后,如果这些单元格的值大于其相应的目标值,我想将其高亮显示为绿色,如果值小于目标值,则高亮显示为橙色

但是,在运行代码时,我不断遇到以下错误:

ValueError:(“序列长度必须匹配才能进行比较”,u出现在索引0'

我能做些什么来解决这个问题

这是我的代码:

import pandas as pd

def AboveTarget(s): # For dataframe style
    green = s > df["Target"]
    orange = s < df["Target"]
    return ["background-color: #86f922" if v else "background-color: #faebde" if w else "background-color: white" for v, w in zip(green, orange)]

df = pd.DataFrame({"Adam": [99.1, 95.2, 83.1],
                   "Gill": [99.2, 96.1, 81],
                   "Louis": [60, 71.5, 99.1],
                   "Target": [99, 98, 95]
                  })

html = (df.style.\
        apply(AboveTarget, subset = pd.IndexSlice[0:1, ["Adam", "Gill"]], axis = 1)
       )

html
将熊猫作为pd导入
def高于目标值:#用于数据帧样式
绿色=s>df[“目标”]
橙色=s
在上述目标中,您试图将名为
s
pd.Series
与数据帧
df
进行比较,这就是它不起作用的原因

一种方法是执行以下操作:

def AboveTarget(s, df): # For dataframe style
    green = s > df.loc[s.name, "Target"]
    orange = s < df.loc[s.name, "Target"]
    return ["background-color: #86f922" if v 
            else "background-color: #faebde" if w 
            else "background-color: white" 
            for v, w in zip(green, orange)]

html = (df.style.\
        apply(AboveTarget, subset = pd.IndexSlice[0:1, ["Adam", "Gill", "Louis"]],
              axis=1, args=(df,))
       )

html

它之所以工作,是因为
Target
既不是
也不是
,因此它将获得
白色的背景色
,通过使用
子集
将切片元素传递到函数
目标上方
。结合
轴=1
将参数
s
传递到
AboveTarget
将是数据帧中的行,即索引为
[“Adam”,“Gill”]
的Pandas系列。您无法将其与索引为
[0,1,2]
的df[“Target”]
系列进行比较

你需要:

import pandas as pd

def AboveTarget(s): # For dataframe style
    green = s > s["Target"]
    orange = s < s["Target"]
    return ["background-color: #86f922" if v else "background-color: #faebde"\
        if w else "background-color: white" for v, w in zip(green, orange)]

df = pd.DataFrame({"Adam": [99.1, 95.2, 83.1],
               "Gill": [99.2, 96.1, 81],
               "Louis": [60, 71.5, 99.1],
               "Target": [99, 98, 95]
              })

html = (df.style.\
        apply(AboveTarget, subset = pd.IndexSlice[0:1, ["Adam", "Gill", "Target"]], axis = 1)
       )

html
将熊猫作为pd导入
def高于目标值:#用于数据帧样式
绿色=s>s[“目标”]
橙色=s
将列“Target”传递给函数,并与相应的
s[“Target”]
值进行比较

import pandas as pd

def AboveTarget(s): # For dataframe style
    green = s > s["Target"]
    orange = s < s["Target"]
    return ["background-color: #86f922" if v else "background-color: #faebde"\
        if w else "background-color: white" for v, w in zip(green, orange)]

df = pd.DataFrame({"Adam": [99.1, 95.2, 83.1],
               "Gill": [99.2, 96.1, 81],
               "Louis": [60, 71.5, 99.1],
               "Target": [99, 98, 95]
              })

html = (df.style.\
        apply(AboveTarget, subset = pd.IndexSlice[0:1, ["Adam", "Gill", "Target"]], axis = 1)
       )

html