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

如何用Pandas批量比较DataFrame中仅后缀不同列的相等占比?

批量比较同前缀列对,计算值相等占比(Pandas实现)

完全可以用Pandas自动处理,不用手动列每一对,核心是通过列名分组来批量操作,具体步骤如下:

1. 按前缀给列分组

假设你的列都是前缀_df1和前缀_df2的格式,先提取每个列的前缀,把同前缀的列归到一组:

import pandas as pd

# 替换成你自己的DataFrame
df = pd.DataFrame({
    'id': ['A1', 'A2', 'A3', 'A4', 'A5'],
    'col1_df1': [1,2,3,4,5],
    'col2_df1': [10,20,30,40,50],
    'col3_df1': [100,200,300,400,500],
    'col1_df2': [1,2,3,4,6],
    'col2_df2': [10,20,30,40,50],
    'col3_df2': [100,201,300,400,500]
})

# 按最后一个下划线拆分提取前缀,完成列分组
col_groups = {}
for col in df.columns.drop('id'):  # 跳过id列
    prefix = col.rsplit('_', 1)[0]  # 从"col1_df1"中提取"col1"
    col_groups.setdefault(prefix, []).append(col)

2. 遍历分组,计算每对列的相等占比

对每个前缀组里的两列,统计值相等的行数占总行数的比例:

match_rates = {}
for prefix, cols in col_groups.items():
    if len(cols) == 2:  # 确保每组刚好是df1和df2两列
        col_a, col_b = cols
        # 直接用mean()统计相等占比,True会被视为1,False视为0
        match_rate = (df[col_a] == df[col_b]).mean()
        match_rates[prefix] = match_rate

# 转成DataFrame让结果更直观
result = pd.DataFrame(match_rates.values(), index=match_rates.keys(), columns=['值相等占比'])
print(result)

运行后输出示例:

值相等占比
col1      0.8
col2      1.0
col3      0.8

适配不同列名格式

如果你的列后缀不是_df1/_df2,比如是_old/_new,只需要调整前缀拆分逻辑:

  • 若前缀是第一个下划线前的内容,用col.split('_', 1)[0]
  • 其他规则的列名,只要保证前缀能唯一标识一组,对应修改字符串处理逻辑即可。

注意事项

  • 确保每组两列的数据类型一致,否则比较会出现异常(比如数值和字符串对比会直接返回False),可以用df.dtypes提前检查。
  • 存在缺失值时,==会将缺失值视为不相等;如果需要把缺失值视为相等,可改用df[col_a].eq(df[col_b], na=True)(Pandas 1.1.0及以上版本支持)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:45:59