如何在Pandas中拆分并拼接逗号分隔文本与对应列文本
Pandas实现多列逗号分隔文本按位置配对拼接
核心思路
对每行的目标列按逗号拆分为列表,按位置将各列的对应元素拼接成「国家,客户ID,账户类型」格式,再用「 - 」连接所有拼接结果,全程动态适配每行的分隔项数量,无需提前拆分固定列数。
示例代码
1. 构造示例数据
import pandas as pd df = pd.DataFrame({ 'CNTRY': ['JO,AE,QA', 'US,CA'], 'CUSTOMERID': ['HJM23,JKU78,OI9PUJ', 'AB12,CD34'], 'ACC_TYPE': ['AH,SH,AS', 'XX,YY'] })
2. 定义行处理函数
def combine_row(row): # 拆分各列为元素列表 cntry_items = row['CNTRY'].split(',') cust_items = row['CUSTOMERID'].split(',') acc_items = row['ACC_TYPE'].split(',') # 按位置配对并拼接成指定格式 paired_groups = [f"{c},{cid},{acc}" for c, cid, acc in zip(cntry_items, cust_items, acc_items)] # 用" - "连接所有配对结果 return ' - '.join(paired_groups)
3. 应用函数到每行
df['COMBINED_RESULT'] = df.apply(combine_row, axis=1)
输出结果
处理后的DataFrame:
| CNTRY | CUSTOMERID | ACC_TYPE | COMBINED_RESULT |
|---|---|---|---|
| JO,AE,QA | HJM23,JKU78,OI9PUJ | AH,SH,AS | JO,HJM23,AH - AE,JKU78,SH - QA,OI9PUJ,AS |
| US,CA | AB12,CD34 | XX,YY | US,AB12,XX - CA,CD34,YY |
适配列长度不一致的情况
如果存在某行各列拆分后的列表长度不同,可使用itertools.zip_longest补全空值:
from itertools import zip_longest def combine_row(row): cntry_items = row['CNTRY'].split(',') cust_items = row['CUSTOMERID'].split(',') acc_items = row['ACC_TYPE'].split(',') # 长度不足的位置补空字符串,避免报错 paired_groups = [f"{c},{cid},{acc}" for c, cid, acc in zip_longest(cntry_items, cust_items, acc_items, fillvalue='')] return ' - '.join(paired_groups)
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

