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

如何并排对齐两个DataFrame各列Top3 value_counts结果校验数据异常

两DataFrame逐列Top3值计数并排对比实现方案

核心实现逻辑

先对两个DataFrame逐列计算Top3值计数,统一格式化后按列对齐组装成新的展示用DataFrame,保证列名、df1统计结果、df2统计结果三列完全对齐,每列统计占3行,列间留空分隔。

步骤1:导入依赖、编写通用统计函数

import pandas as pd

def calc_col_top3(input_df: pd.DataFrame) -> dict:
    """逐列计算Top3值计数,返回格式为 {列名: [格式化后的计数结果1, 结果2, 结果3]}"""
    res = {}
    for col in input_df.columns:
        # 取单列Top3值计数,格式化为「值: 出现次数」
        count_series = input_df[col].value_counts().head(3)
        res[col] = [f"{val}: {cnt}" for val, cnt in count_series.items()]
        # 不足3个值的列补空字符串,保证行对齐
        while len(res[col]) < 3:
            res[col].append("")
    return res

步骤2:计算统计结果、组装展示表

# 分别计算两日数据的逐列Top3
df1_stats = calc_col_top3(df1)
df2_stats = calc_col_top3(df2)

# 按展示要求组装行数据
show_rows = []
for col_name in df1.columns:
    # 每列对应3行统计结果,仅第一行显示列名
    for row_idx in range(3):
        show_rows.append({
            "": col_name if row_idx == 0 else "",
            "df1": df1_stats[col_name][row_idx],
            "df2": df2_stats[col_name][row_idx]
        })
    # 每列统计结束后加空行分隔
    show_rows.append({"": "", "df1": "", "df2": ""})

# 生成最终展示表,隐藏索引
show_df = pd.DataFrame(show_rows)
# 终端打印用这个
print(show_df.to_string(index=False))

# Jupyter/IPython环境下用下面的方法展示样式更美观
# from IPython.display import display
# display(show_df.style.hide(axis="index"))

可选优化

  • 如果需要展示值的占比辅助排查异常,可修改函数内的格式化字符串为f"{val}: {cnt} 占比{cnt/len(input_df):.1%}"
  • 如果不需要列间空行,删掉组装行数据时追加空行的那行代码即可
  • 如果要调整列展示顺序,修改show_rows里字典的key顺序就行

内容的提问来源于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 21:45:44