Python 在两个数据帧之间应用样式差异
我已经看到了很多关于寻找两个数据帧之间差异的问题,但是在这里我试图应用两个数据帧之间的差异。鉴于这两个示例数据帧,我希望将格式化程序应用于right[1,“B”]和right[“D”],因为它们不同于left值或一般的新值: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
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方法现在返回与输入相同形状的数据(根据文档)
正确的数据帧作为列表而不是元组传递
还更改了逐值比较,以在颜色不同时返回颜色,否则保留默认样式