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

如何在DataFrame中对比两列并生成相等标识列(1/0)

DataFrame新增对比列并计算正误占比的解决方案

问题说明

你需要在DataFrame中新增一列same,标记ConvenienceStoreClosest和ConvenienceStoreClosestOSRM两列的每行值是否相同(1表示相同/正确,0表示不同/错误),再计算两者的占比。但你之前的代码逻辑存在错误:直接比较列名字符串而非对应行的实际值,且apply仅传入了单一列的数据,根本没用到另一列的内容。

错误代码分析

你的原有代码:

def same(closests):
    if 'ConvenienceStoreClosest' >= 'ConvenienceStoreClosestOSRM':
        return 1
    else:
        return 0
df_all['same'] = df_all['ConvenienceStoreClosest'].apply(same)

核心问题:

  • 函数内比较的是两个列名的字符串,不是每行的实际数值
  • apply仅传入了ConvenienceStoreClosest列的值,完全未涉及ConvenienceStoreClosestOSRM列的数据

正确实现方式

方法一:直接列运算(推荐,效率更高)

无需自定义函数,直接对两列做相等判断,再转换为整数类型:

# 新增same列,1表示两列值相同,0表示不同
df_all['same'] = (df_all['ConvenienceStoreClosest'] == df_all['ConvenienceStoreClosestOSRM']).astype(int)

方法二:使用apply按行处理

如果一定要用自定义函数,需指定axis=1让apply按行处理,函数接收整行数据后比较对应列:

def same(row):
    return 1 if row['ConvenienceStoreClosest'] == row['ConvenienceStoreClosestOSRM'] else 0

df_all['same'] = df_all.apply(same, axis=1)

计算正误占比

方式一:用均值计算

correct_ratio = df_all['same'].mean()  # 正确占比(1的比例)
error_ratio = 1 - correct_ratio       # 错误占比(0的比例)

print(f"正确占比: {correct_ratio:.2%}")
print(f"错误占比: {error_ratio:.2%}")

方式二:用value_counts统计

ratio = df_all['same'].value_counts(normalize=True)
print(f"正确占比: {ratio.get(1, 0):.2%}")
print(f"错误占比: {ratio.get(0, 0):.2%}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:20:28