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

Pandas实现name与id匹配及异常数据清洗处理方法

解决方案

前置说明

示例中构造数据的字典键为id,打印输出的列名为store,下文统一以store列对应逻辑上的id列,若你实际数据列名为id,替换代码中对应列名即可。

前置准备:构建映射表(适配大数据量,无遍历逻辑)

先预计算两个全局映射字典,所有操作都是pandas原生优化的聚合运算,时间复杂度O(n):

import pandas as pd

# 构造示例数据(你实际使用时替换为自己的df即可)
d = {'store': ['1', '1', '2', '2',], 'name': ['a', 'a', 'a', 'b'], 'value': ['1', '2', '3', '4']}
df = pd.DataFrame(data=d)

# 1. name -> 正确store的映射:取每个name分组下出现频次最高的store
name_to_correct_store = df.groupby('name')['store'].agg(lambda x: x.value_counts().index[0]).to_dict()

# 2. store -> 正确name的映射:取每个store分组下出现频次最高的name(第二个问题使用)
store_to_correct_name = df.groupby('store')['name'].agg(lambda x: x.value_counts().index[0]).to_dict()

问题1:删除id与正确id不匹配的行

用向量化匹配过滤,避免行遍历,性能远高于apply实现:

df_q1 = df[df['store'] == df['name'].map(name_to_correct_store)].reset_index(drop=True)
print(df_q1)

输出结果:

store name value
0     1    a     1
1     1    a     2
2     2    b     4

问题2:修改name使其与id正确对应

直接用映射表批量替换name列,也是向量化操作,效率极高:

df_q2 = df.copy()
df_q2['name'] = df_q2['store'].map(store_to_correct_name)
print(df_q2)

输出结果:

store name value
0     1    a     1
1     1    a     2
2     2    b     3
3     2    b     4

性能说明

以上方案全部基于pandas原生向量化运算和哈希映射查询,没有自定义循环逻辑,针对数千甚至数十万级的name/id数据都可以在秒级完成处理,完全适配大数据量场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:06:00