如何在Python DataFrame中结合两列使用startswith按前缀匹配生成新列
Python DataFrame 基于A、B列生成C列实现方案
实现逻辑
- 先定义前缀与输出结果的映射规则
- 分别提取A、B列每条数据的前4个字符,长度不足4的取完整值避免报错
- 只要任意一列的前4位匹配映射规则,就返回对应的结果
完整代码示例
import pandas as pd # 定义前缀匹配规则 prefix_map = { 'INKA': 'KAR', 'IDKA': 'KAR', 'INAP': 'AP', 'IDAP': 'AP', 'INRJ': 'RAJ', 'IDRJ': 'RAJ' } # 构造测试数据(对应你提供的样例) data = { 'A': [ 'IDKA106829_KMGL_H_Z_8121', 'IDKA101971_KUDU_H_Z_8251', 'SIRA_RPTR', 'IDAP104327_PEDA_H_Z_8251', 'IDAP103547_RAMP_H_Z_8251', 'SALURU', 'IDRJ103411_KOTA_H_Z_8251', 'IDRJ100041_BKNR_H_Z_8251', 'JAIPR203' ], 'B': [ 'INKA100345_KMGL_H_Z_8251', 'YEDTHADY-IND', 'IDKA102853_KSIR_H_Z_8251', 'IDAP104769_URUM_H_Z_8251', 'MADDIRALA', 'IDAP103620_SALU_H_Z_8251', 'KOT009', 'INRJ200420_BKNR_H_Z_8251', 'INRJ200420_BKNR_H_Z_8251' ] } df = pd.DataFrame(data) # 提取A、B列的前4位前缀 df['a_prefix'] = df['A'].str[:4] df['b_prefix'] = df['B'].str[:4] # 生成C列,默认优先匹配A列前缀,可调整顺序修改优先级 df['C'] = df.apply( lambda x: prefix_map.get(x['a_prefix'], prefix_map.get(x['b_prefix'], None)), axis=1 ) # 删除临时生成的前缀列 df = df.drop(columns=['a_prefix', 'b_prefix']) # 输出结果查看 print(df)
结果说明
运行上述代码生成的C列和你提供的样例完全匹配,若存在A、B列同时匹配不同前缀的场景,调整lambda中prefix_map.get的参数顺序即可调整匹配优先级。
内容的提问来源于stack exchange,提问作者Sudarshan Waman
相关产品推荐
相关产品推荐

