gpt4 book ai didi

python - Pandas:如何排除匹配项并仅获取具有多级列索引的数据框中突出显示的差异

转载 作者:行者123 更新时间:2023-12-04 07:22:08 25 4
gpt4 key购买 nike

我将在下面展示两个数据帧的差异,

df_all = pd.concat([df_source.set_index('id'), df_target.set_index('id')], 
axis='columns', keys=['First', 'Second']).drop_duplicates(keep=False)
df_final = df_all.swaplevel(axis='columns')[df_source.columns[1:]]
def highlight_diff(data, color='yellow'):
attr = 'background-color: {}'.format(color)

other = data.xs('First', axis='columns', level=-1)
return pd.DataFrame(np.where(data.ne(other, level=0), attr, ''),
index=data.index, columns=data.columns)

df_final.style.apply(highlight_diff, axis=None)
enter image description here
现在我如何只显示不匹配的行?在这种情况下,Id 103 和 106 行并排除其他行

最佳答案

您可以使用 .filter() 使用 First 过滤列并将其拆分为 2 个列子集和 Second , 使用 .droplevel 只保留一级列索引,使2部分具有相同的列索引,以便于比较。最后,使用 .compare() 比较并突出2个部分的不同之处,如下:

df1 = df_final.filter(like='First').droplevel(level=1, axis=1)
df2 = df_final.filter(like='Second').droplevel(level=1, axis=1)
df1.compare(df2).rename({'self': 'First', 'other': 'Second'}, axis=1)
输出:
           lastname              profession        
First Second First Second
id
103 Brenn_modified Brenn NaN NaN
106 NaN NaN doctor_modified doctor

关于python - Pandas:如何排除匹配项并仅获取具有多级列索引的数据框中突出显示的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68428248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com