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

如何在多时段多地点的物质测量数据中检测重复值

检测同一地点、日期下的重复物质测量数据

需求说明

需要在包含Location_ID、Substance、date字段的物质测量数据集中,编写代码检测:同一Location_ID且同一date下是否存在重复的Substance。

  • 若无重复,输出No duplicate found
  • 若有重复,输出duplicate found并列出所有重复行

数据集示例

Location_IDSubstancedate
1A16.02.2021
2A18.02.2021
1A17.02.2021
2B18.02.2021
1B19.02.2021
2A18.02.2021
1C17.02.2021
2C18.02.2021

方法1:基础循环实现(适合新手理解逻辑)

代码实现

# 模拟从文件/数据库读取的数据集
data = [
    {"Location_ID": 1, "Substance": "A", "date": "16.02.2021"},
    {"Location_ID": 2, "Substance": "A", "date": "18.02.2021"},
    {"Location_ID": 1, "Substance": "A", "date": "17.02.2021"},
    {"Location_ID": 2, "Substance": "B", "date": "18.02.2021"},
    {"Location_ID": 1, "Substance": "B", "date": "19.02.2021"},
    {"Location_ID": 2, "Substance": "A", "date": "18.02.2021"},
    {"Location_ID": 1, "Substance": "C", "date": "17.02.2021"},
    {"Location_ID": 2, "Substance": "C", "date": "18.02.2021"},
]

# 存储已出现的(地点,日期,物质)组合及对应行数据
seen = {}
duplicate_rows = []

# 遍历每一行数据
for row in data:
    # 生成唯一标识键:三个字段的组合
    key = (row["Location_ID"], row["date"], row["Substance"])
    if key in seen:
        # 若组合已存在,将当前行和之前的行都加入重复列表
        if seen[key] not in duplicate_rows:
            duplicate_rows.append(seen[key])
        duplicate_rows.append(row)
    else:
        # 若组合未出现,记录到字典中
        seen[key] = row

# 输出检测结果
if duplicate_rows:
    print("duplicate found")
    print("重复行如下:")
    for row in duplicate_rows:
        print(f"Location_ID: {row['Location_ID']}, Substance: {row['Substance']}, date: {row['date']}")
else:
    print("No duplicate found")

代码解释

  1. 数据模拟:把表格数据转为列表字典格式,这是新手易理解的基础数据结构。
  2. 记录已出现组合:用seen字典存储已见过的(地点,日期,物质)组合,键为组合本身,值为对应行数据。
  3. 遍历检测重复:
    • 每行生成唯一key,包含三个核心字段
    • 若key已在seen中,说明是重复项,将当前行和之前存储的行都加入重复列表
    • 若key未出现,则将当前行存入字典
  4. 结果输出:根据重复列表是否为空,输出对应提示和重复行。

方法2:用Pandas实现(高效简洁,适合实际项目)

如果处理大型数据集,用Pandas会更高效,代码也更简洁。

代码实现

import pandas as pd

# 将数据集转为Pandas表格格式
df = pd.DataFrame([
    {"Location_ID": 1, "Substance": "A", "date": "16.02.2021"},
    {"Location_ID": 2, "Substance": "A", "date": "18.02.2021"},
    {"Location_ID": 1, "Substance": "A", "date": "17.02.2021"},
    {"Location_ID": 2, "Substance": "B", "date": "18.02.2021"},
    {"Location_ID": 1, "Substance": "B", "date": "19.02.2021"},
    {"Location_ID": 2, "Substance": "A", "date": "18.02.2021"},
    {"Location_ID": 1, "Substance": "C", "date": "17.02.2021"},
    {"Location_ID": 2, "Substance": "C", "date": "18.02.2021"},
])

# 筛选出所有重复行:按三个字段判断,keep=False标记所有重复行
duplicates = df[df.duplicated(subset=["Location_ID", "date", "Substance"], keep=False)]

# 输出检测结果
if not duplicates.empty:
    print("duplicate found")
    print("重复行如下:")
    print(duplicates)
else:
    print("No duplicate found")

代码解释

  1. 导入Pandas:先通过pip install pandas安装库,它是Python处理表格数据的常用工具。
  2. 创建DataFrame:将数据转为Pandas表格格式,方便快速操作。
  3. 检测重复行:
    • df.duplicated(subset=["Location_ID", "date", "Substance"], keep=False):返回布尔序列,标记所有重复行
    • 用该序列筛选出所有重复行,存入duplicates
  4. 结果输出:判断重复行表格是否为空,输出对应提示和重复行。

输出结果示例

两种方法运行后都会输出:

duplicate found
重复行如下:
   Location_ID Substance       date
1            2         A  18.02.2021
5            2         A  18.02.2021

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:40:29