You need to enable JavaScript to run this app. Python pandas按分组匹配列最后8字符替换为长值并补前缀+
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas按分组匹配列最后8字符替换为长值并补前缀+

你可以按照「预处理号码 -> 提取后8位特征 -> 组内匹配替换」的逻辑实现,完整代码如下:

import pandas as pd
import numpy as np

# 1. 数据预处理
# 统一ColumnB为字符串格式,避免数字类型导致的匹配异常
df['ColumnB'] = df['ColumnB'].astype(str)
# 执行规则2:给以49开头且无+前缀的号码补加+
df['temp_processed_b'] = np.where(df['ColumnB'].str.startswith('49'), 
                                  "+" + df['ColumnB'], 
                                  df['ColumnB'])
# 提取每个号码的最后8位作为匹配特征
df['last_8_char'] = df['temp_processed_b'].str[-8:]

# 2. 同组匹配替换
# 按「分组标识+最后8位」双维度分组,每组取长度最长的号码作为统一值
replace_map = df.groupby(['ColumnA', 'last_8_char'])['temp_processed_b'].apply(
    lambda x: x.loc[x.str.len().idxmax()]
)
# 将统一值映射回原数据集
df['ColumnB'] = df.set_index(['ColumnA', 'last_8_char']).index.map(replace_map)

# 3. 输出结果,删除临时列
result = df[['ColumnA', 'ColumnB']]

逻辑说明

  • 双维度分组天然实现了同组内后8位的匹配逻辑,不需要额外写比对判断代码:同ColumnA、同后8位的行被分到同一个组,其余行单独成组
  • 每个分组内取最长字符串作为统一值,符合规则1的要求
  • 单独成组的行(同组内没有后8位匹配的其他行)会保留自己的预处理后的值,符合规则3的要求
  • 代码运行结果和你给出的期望输出完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:51:00