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

Pandas DataFrame字符串拆分求助:将特定格式列转为目标列表

解决DataFrame位置列格式转换问题

我来帮你搞定这个格式转换的问题!你的原始代码嵌套了太多循环,逻辑也绕了弯路,我们可以用更简洁的Pandas自定义函数来实现需求,逻辑清晰还容易维护。

转换规则拆解

先把需求里的转换逻辑明确下来:

  • 逗号分隔的每个部分独立处理
  • 若部分包含(...),拆分位置组和角色组:
    • 位置组有斜杠/时,拆分每个单独位置
    • 角色组去掉括号后,若有多个字符(比如RC),拆分每个单独角色
    • 每个位置和每个角色两两组合,用空格分隔
  • 若部分没有括号,直接保留原内容

实现代码

先定义处理单个字符串的函数,然后用apply批量处理列:

import pandas as pd

def process_position(s):
    result = []
    # 按逗号拆分每个子部分
    parts = s.split(', ')
    for part in parts:
        if '(' in part:
            # 拆分位置和角色部分
            positions_str, roles_str = part.split('(', 1)
            roles_str = roles_str.replace(')', '')
            # 拆分位置(处理斜杠)
            positions = positions_str.split('/')
            # 拆分角色(处理多字符)
            roles = list(roles_str)
            # 两两组合
            for pos in positions:
                for role in roles:
                    result.append(f"{pos} {role}")
        else:
            # 没有括号的部分直接添加
            result.append(part)
    # 转成目标格式的字符串
    return f"[{', '.join(result)}]"

# 测试用DataFrame
data = {
    'position': [
        'D/WB/M (L)',
        'DM, M/AM (C)',
        'D (RC), WB (R)',
        'D (C), DM, M (C)',
        'M (C), AM (LC), ST (C)'
    ]
}
df = pd.DataFrame(data)

# 应用函数生成新列
df['processed_position'] = df['position'].apply(process_position)

print(df['processed_position'])

输出结果

运行后会得到你期望的格式:

0          [D L, WB L, M L]
1             [DM, M C, AM C]
2          [D R, D C, WB R]
3             [D C, DM, M C]
4    [M C, AM L, AM C, ST C]
Name: processed_position, dtype: object

代码解释

  1. process_position函数:负责处理单个位置字符串,核心逻辑是拆分每个子部分,处理位置和角色的组合
  2. 拆分与组合:对带括号的部分,先拆分位置和角色,再分别处理斜杠和多字符角色,最后做笛卡尔积组合
  3. 批量处理:用Pandas的apply方法,把函数应用到整个列,避免了繁琐的嵌套循环

这样的代码比你原来的版本简洁很多,逻辑也更清晰,容易调试和修改~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:14:08