突出显示两个数据帧之间的差异

时间:2018-04-30 14:40:08

标签: python pandas dataframe

我有两个包含日期的数据框:

DF1:

Name  A             B             C  
D1    2018-04-26    2018-04-24    2018-04-24
D2    2018-04-25    2018-04-23    2018-04-23
D3    2018-04-25    2018-04-26    2018-04-26

DF2:

Name  A             B             C  
D1    2018-04-24    2018-04-23    2018-04-24
D2    2018-04-25    2018-04-23    2018-04-21
D3    2018-04-22    2018-04-24    2018-04-23

让我说我想设置df1样式,如果一个值不等于df2中的相应值,它会突出显示红色的单元格。

我知道我需要创建一个函数并使用

df1.style.applymap()

但我在将功能放在一起时遇到了麻烦。就像是;

def diffindicator(val):
    color = 'white'   
    if val != df2:
        color = 'red'
    return 'background-color: %s' % color

1 个答案:

答案 0 :(得分:1)

这是突出差异的一种方法:

# Load Example Data
df1 = pd.read_fwf(StringIO(
'''Name  A             B             C  
D1    2018-04-26    2018-04-24    2018-04-24
D2    2018-04-25    2018-04-23    2018-04-23
D3    2018-04-25    2018-04-26    2018-04-26'''))
df2 = pd.read_fwf(StringIO(
'''Name  A             B             C  
D1    2018-04-24    2018-04-23    2018-04-24
D2    2018-04-25    2018-04-23    2018-04-21
D3    2018-04-22    2018-04-24    2018-04-23'''))

def highlight_diff(data, other, color='pink'):
    # Define html attribute
    attr = 'background-color: {}'.format(color)
    # Where data != other set attribute
    return pd.DataFrame(np.where(data.ne(other), attr, ''),
                        index=data.index, columns=data.columns)

# Set axis=None so it passes the entire frame
df2.style.apply(highlight_diff, axis=None, other=df1)

输出:

Difference between Frames

另外,请查看this question,详细了解DataFrames之间的区别......事实上,我的答案可能会或可能不会受到this answer的启发。