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

Pandas并排对齐两个DataFrame值计数结果输出格式异常

问题根因

当前输出是两个DataFrame的值计数结果被纵向拼接了,没有按字段名做索引对齐后横向排布,和部分列值计数条目不足3个没有关系。问题出在合并逻辑:大概率是调用pd.concat时没有指定axis=1参数,或是在把value_counts结果转成字符串列表的过程中丢失了字段名索引,导致两个数据集的结果上下堆叠到了一起。

修复方案

按如下逻辑实现即可得到按字段对齐的并排对比结果:

  • 分别遍历两个DataFrame的所有列,生成统一格式的值计数汇总,以字段名作为索引
  • 调用拼接方法时指定横向拼接,让pandas自动按字段名索引对齐两个数据集的结果
  • 给两列结果命名区分来源数据集

可直接复用的代码:

import pandas as pd

# 统一生成单DataFrame的值计数汇总
def gen_vc_report(df, top_n=3):
    vc_map = {}
    for col in df.columns:
        count_res = df[col].value_counts().head(top_n)
        vc_map[col] = [f"{val} - {cnt}" for val, cnt in count_res.items()]
    return pd.Series(vc_map, name=df.name)

# 给两个目标DataFrame设置名称,用于最终列名区分
df_curr_obj.name = "df_curr_obj"
df_old_obj.name = "df_old_obj"

# 横向拼接,自动按字段名对齐
compare_result = pd.concat(
    [gen_vc_report(df_curr_obj), gen_vc_report(df_old_obj)],
    axis=1
)

# 打印查看结果
print(compare_result)
补充说明
  • 如果需要展示更多Top N的值计数,直接修改gen_vc_report函数的top_n参数即可,哪怕某列的值计数只有1条,pandas也会自动在对应缺失位置填充空值,不会再出现结果上下堆叠的问题
  • 如果觉得列表形式的内容阅读不便,也可以把每个值计数条目拆成独立列,对比差异时更直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:18:49