Pandas 条件格式:突出显示一帧中与另一帧中不相等的单元格
Pandas conditional formatting: Highlighting cells in one frame that are unequal to those in another
给定两个 pandas 数据帧 df1 和 df2,它们具有完全相同的架构(即相同的索引和列,因此大小相等),我只想为 df1 中与它们在df2。有什么提示吗?
更一般地说,如果我有一个预定义的颜色矩阵 colormat,其尺寸与 df1 相同,我能否根据 colormat 中给定的颜色以某种方式为 df1 的每个单元格着色?
简单示例
df1 = pd.DataFrame({'colA':[3,4,5], 'colB':[6,7,8]})
df2 = pd.DataFrame({'colA':[3,4,50], 'colB':[6,70,8]})
colormat = df1.eq(df2).replace({False:'red', True:'green'})
应用于 df1 时,我希望 df1.loc[2,'colA'] 和 df1.loc[1, 'colB'] 为红色,其他单元格绿色,因为 5 != 50 和 7 != 70
样式需要有效 CSS,所以将 'red' 和 'green' 更改为 'background-color: red'
和 'background-color: green'
,然后只需 apply
在 axis=None
上传递 colormat
DataFrame:
import pandas as pd
df1 = pd.DataFrame({'colA': [3, 4, 5], 'colB': [6, 7, 8]})
df2 = pd.DataFrame({'colA': [3, 4, 50], 'colB': [6, 70, 8]})
colormat = df1.eq(df2).replace({False: 'background-color: red',
True: 'background-color: green'})
df1.style.apply(lambda _: colormat, axis=None)
取决于 DataFrame 的大小 np.where
可能性能更高:
colormat = np.where(df1.eq(df2),
'background-color: green',
'background-color: red')
df1.style.apply(lambda _: colormat, axis=None)
两者都产生:
给定两个 pandas 数据帧 df1 和 df2,它们具有完全相同的架构(即相同的索引和列,因此大小相等),我只想为 df1 中与它们在df2。有什么提示吗?
更一般地说,如果我有一个预定义的颜色矩阵 colormat,其尺寸与 df1 相同,我能否根据 colormat 中给定的颜色以某种方式为 df1 的每个单元格着色?
简单示例
df1 = pd.DataFrame({'colA':[3,4,5], 'colB':[6,7,8]})
df2 = pd.DataFrame({'colA':[3,4,50], 'colB':[6,70,8]})
colormat = df1.eq(df2).replace({False:'red', True:'green'})
应用于 df1 时,我希望 df1.loc[2,'colA'] 和 df1.loc[1, 'colB'] 为红色,其他单元格绿色,因为 5 != 50 和 7 != 70
样式需要有效 CSS,所以将 'red' 和 'green' 更改为 'background-color: red'
和 'background-color: green'
,然后只需 apply
在 axis=None
上传递 colormat
DataFrame:
import pandas as pd
df1 = pd.DataFrame({'colA': [3, 4, 5], 'colB': [6, 7, 8]})
df2 = pd.DataFrame({'colA': [3, 4, 50], 'colB': [6, 70, 8]})
colormat = df1.eq(df2).replace({False: 'background-color: red',
True: 'background-color: green'})
df1.style.apply(lambda _: colormat, axis=None)
取决于 DataFrame 的大小 np.where
可能性能更高:
colormat = np.where(df1.eq(df2),
'background-color: green',
'background-color: red')
df1.style.apply(lambda _: colormat, axis=None)
两者都产生: