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

Pandas:按分组基于另一列映射替换指定列数值

分组映射替换DataFrame列值的高效方案

问题场景

给定如下DataFrame和映射字典:

import pandas as pd

df = pd.DataFrame({'group_col':['g1','g1','g1','g1','g2','g2','g2','g2'], 
                   'map_col': ['a','b','c','d','a','b','c','d'], 
                   'replace_col':[1,2,3,4,5,6,7,8]})
map_dict = {'a': 'b', 'c': 'd'}

原始DataFrame内容:

group_col map_col  replace_col
0        g1       a            1
1        g1       b            2
2        g1       c            3
3        g1       d            4
4        g2       a            5
5        g2       b            6
6        g2       c            7
7        g2       d            8

需求:针对group_col中的每个分组,按照map_dict对map_col的映射关系,替换replace_col的值,最终得到:

group_col map_col  replace_col
0        g1       a            2
1        g1       b            2
2        g1       c            4
3        g1       d            4
4        g2       a            6
5        g2       b            6
6        g2       c            8
7        g2       d            8

针对包含大量分组和替换操作的大型DataFrame,求最优/最快的处理方法(假设每个分组内的map_col条目无重复)。

高效解决方案

对于大型DataFrame,需避免逐行apply或分组循环(这类方法在数据量较大时性能极差),推荐使用矢量化合并操作,利用Pandas内置优化实现高效处理:

核心思路

  1. 为每行生成map_col对应的目标映射值,创建临时列
  2. 构建参考映射表,关联每个分组内目标映射值与对应的replace_col
  3. 通过合并操作批量替换原DataFrame的replace_col值

代码实现

import pandas as pd

# 原始数据
df = pd.DataFrame({'group_col':['g1','g1','g1','g1','g2','g2','g2','g2'], 
                   'map_col': ['a','b','c','d','a','b','c','d'], 
                   'replace_col':[1,2,3,4,5,6,7,8]})
map_dict = {'a': 'b', 'c': 'd'}

# 1. 生成每行的目标映射值
df['target_map'] = df['map_col'].replace(map_dict)

# 2. 构建参考映射表:匹配(group_col, target_map)到对应的replace_col
ref_df = df[['group_col', 'map_col', 'replace_col']].rename(
    columns={'map_col': 'target_map', 'replace_col': 'new_replace'}
)

# 3. 合并数据并替换replace_col
df = df.merge(ref_df, on=['group_col', 'target_map'])
df['replace_col'] = df['new_replace']

# 清理临时列
df = df.drop(columns=['target_map', 'new_replace'])

print(df)

性能优势

  • 所有操作均为Pandas矢量化运算,避免Python层面循环,处理大型数据集时性能远优于apply或分组循环
  • 利用merge的哈希匹配机制,时间复杂度接近O(n),适合超大规模DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:21:13