You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas df.compare()时如何显示行名称而非索引序号?

问题

使用Pandas的df.compare()对比两个行名称/索引完全相同的CSV文件时,能正常显示数据差异,但结果里的行仅显示数字索引(如0、2、3、4),希望将这些数字索引替换为对应的行文本名称。

当前使用的代码:

diff_out_csv = old.compare(latest, align_axis=1).rename(columns={'self':'old','other':'latest'})

当前输出:

NUMBER1          NUMBER2       NUMBER3            
            old   latest     old  latest   old latest
    0  -14.1685 -14.0132 -1.2583 -1.2611   NaN    NaN
    2   -9.7875 -12.2739 -0.3532 -0.3541  86.0  100.0
    3   -0.0365  -0.0071 -0.0099 -0.0039   6.0    2.0
    4   -1.9459  -1.5258 -0.5402 -0.0492  73.0  131.0

期望输出:

NUMBER1          NUMBER2          NUMBER3       
            old   latest     old  latest      old latest
    JACK  -14.1685 -14.0132 -1.2583 -1.2611   NaN    NaN
    JASON  -9.7875 -12.2739 -0.3532 -0.3541   86.0  100.0
    JACOB  -0.0365 -0.0071  -0.0099 -0.0039    6.0    2.0
    JIMMY  -1.9459 -1.5258  -0.5402 -0.0492   73.0  131.0

已通过df.compare.rename(columns={})修改了列名,但不知道如何替换数字索引为文本名称。

解决方案

df.compare()返回的结果默认保留的是原DataFrame的位置索引(数字),直接从原DataFrame(old或latest,两者索引一致)中提取对应位置的文本索引标签,赋值给结果的索引即可。

修改后的代码:

# 生成对比结果
diff_out_csv = old.compare(latest, align_axis=1).rename(columns={'self':'old','other':'latest'})
# 将结果的数字索引替换为原DataFrame的文本索引
diff_out_csv.index = old.index[diff_out_csv.index]

或者合并为一行代码:

diff_out_csv = old.compare(latest, align_axis=1).rename(columns={'self':'old','other':'latest'}).set_index(old.index[old.compare(latest, align_axis=1).index])

原理说明

  • old.index是原DataFrame的完整文本索引列表(如['JACK', 'xxx', 'JASON', ...])
  • diff_out_csv.index是对比结果返回的数字位置索引(如[0,2,3,4])
  • 通过old.index[diff_out_csv.index]可精准提取对应位置的文本索引,替换掉结果里的数字索引

内容的提问来源于stack exchange,提问作者JNC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:55:03