Python 在两个数据帧之间应用样式差异

Python 在两个数据帧之间应用样式差异,python,html,pandas,Python,Html,Pandas,我已经看到了很多关于寻找两个数据帧之间差异的问题,但是在这里我试图应用两个数据帧之间的差异。鉴于这两个示例数据帧,我希望将格式化程序应用于right[1,“B”]和right[“D”],因为它们不同于left值或一般的新值: left = pd.DataFrame([[1,1,1], [2,2,2]], columns=list("ABC")) right = pd.DataFrame([[1,1,10], [2,5,10]], columns=list("ABD")) 以下是我对pandas

我已经看到了很多关于寻找两个数据帧之间差异的问题,但是在这里我试图应用两个数据帧之间的差异。鉴于这两个示例数据帧,我希望将格式化程序应用于right[1,“B”]和right[“D”],因为它们不同于left值或一般的新值:

left = pd.DataFrame([[1,1,1], [2,2,2]], columns=list("ABC"))
right = pd.DataFrame([[1,1,10], [2,5,10]], columns=list("ABD"))
以下是我对pandas文档指导的格式化方法的想法

def formatter(s, new):
    if s.name not in new.columns:
        # column doesn't exist strike through entire thing
        return "color: red; text-decoration: line-through;"

    elif not s.equals(new[s.name]):
        # apply per value a comparision of the elements
        # for val in s: 
            # if val != right[val.index??]:
                return "color: red; text-decoration: line-through;"

    return "color: black;"

left.style.apply(formatter, args=(right))
我的想法是,以后我应该有这样的html:


A.
B
C
0
1.
1.
1.
1.
2.
2.
2.

您的卡在哪里有点不清楚,但代码已经不远了

这可能就是你想要的:

left = pd.DataFrame([[1,1,1], [2,2,2]], columns=list("ABC"))
right = pd.DataFrame([[1,1,10], [2,5,10]], columns=list("ABD"))
def formatter(s, new):
    if s.name not in new.columns:
        # column doesn't exist strike through entire thing
        return ["color: red; text-decoration: line-through;"]*len(s)

    elif not s.equals(new[s.name]):
        return ["color: red; text-decoration: line-through;" if v else "" for v in s == new[s.name]]

    return ["color: black;"]*len(s)

left.style.apply(formatter, args=[right])
formatter方法现在返回与输入相同形状的数据(根据文档)

正确的数据帧作为列表而不是元组传递

还更改了逐值比较,以在颜色不同时返回颜色,否则保留默认样式