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

如何遍历DataFrame列中重复值并验证对应单位值匹配?

解决方案:基于Code分组匹配对应Length的Value

核心思路

由于每个code固定对应两个length字符串,我们可以先为每个code建立length与value的映射关系,再对比同一code下两个length对应的value是否一致,最终生成二进制标记列,全程无需解析length的数值或单位。

步骤与代码示例

1. 构造示例数据(模拟你的场景)

import pandas as pd

data = {
    'code': ['111ab', '111ab', '222cd', '222cd', '333ef', '333ef'],
    'length': ['800 mm', '31,0 in', '1000 mm', '39,4 in', '500 mm', '19,7 in'],
    'value': [100, 100, 200, 200, 300, 350]  # 最后一组value不匹配,用于测试
}
df = pd.DataFrame(data)

2. 生成Code-Length-Value映射字典

通过分组操作,为每个code建立对应的length到value的映射:

# 按code分组,生成每个code对应的length-value字典
code_length_map = df.groupby('code').apply(
    lambda x: x.set_index('length')['value'].to_dict()
).to_dict()

3. 生成匹配标记列

定义函数遍历每一行,对比当前行value与同一code下另一个length对应的value,一致则标记为1,否则为0:

def check_value_match(row):
    code = row['code']
    current_length = row['length']
    # 获取当前code对应的所有length-value对
    length_value_pairs = code_length_map[code]
    # 提取当前length之外的另一个value
    other_value = [v for k, v in length_value_pairs.items() if k != current_length][0]
    # 返回二进制匹配结果
    return 1 if row['value'] == other_value else 0

# 新增match列
df['match'] = df.apply(check_value_match, axis=1)

4. 结果展示

运行后得到的DataFrame如下:

codelengthvaluematch
111ab800 mm1001
111ab31,0 in1001
222cd1000 mm2001
222cd39,4 in2001
333ef500 mm3000
333ef19,7 in3500

补充说明

  • 该方案完全基于给定的映射关系对比,不涉及任何length字符串的解析,适配特殊取整或自定义单位的场景
  • 假设每个code严格对应2个length值,如果存在code对应多个length的情况,需要调整other_value的提取逻辑(比如增加长度判断)
  • 若需处理code仅对应1个length的异常场景,可在函数中添加判断,返回NaN或自定义标记

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:05:08