pandas使用df.compare且align_axis=1时如何修改self/other标签?
解决方案
当align_axis=1时,self和other属于列MultiIndex的最后一层标签,你之前的方法是修改行索引,自然不会生效,只要把rename的操作对象从index改为columns即可:
# 仅需将index参数替换为columns,其余逻辑不变 df1.compare(df2, align_axis=1).rename(columns={'self': 'left', 'other': 'right'}, level=-1)
原理说明
compare返回结果的标签存储位置和align_axis参数直接相关:
align_axis=0:self/other存储在行索引的最后一层,所以用rename(index=..., level=-1)修改align_axis=1:self/other存储在列索引的最后一层,所以用rename(columns=..., level=-1)修改
如果你需要适配两种align_axis场景,也可以用更通用的写法:
diff_result = df1.compare(df2, align_axis=1) if diff_result.columns.nlevels > 1: # align_axis=1场景,改列标签 diff_result = diff_result.rename(columns={'self': 'left', 'other': 'right'}, level=-1) else: # align_axis=0场景,改行标签 diff_result = diff_result.rename(index={'self': 'left', 'other': 'right'}, level=-1)
内容的提问来源于stack exchange,提问作者BioGeek
相关产品推荐
相关产品推荐

