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

如何拆分Pandas数据框中的公式列并生成值组合?

处理Pandas公式列的逻辑组合生成

核心思路是把公式拆解为「AND分组」(+分隔的部分),每个分组内的OR选项(/分隔)做笛卡尔积,最终得到所有合法的AND组合。

步骤拆解

  1. 拆分AND分组:把公式按+分割,但要保留括号内的完整内容(避免把括号里的+误拆分)。用正则表达式可以精准匹配每个分组:要么是括号包裹的内容,要么是无括号的连续字符。
  2. 提取OR选项:对每个分组去掉括号,再按/分割成可选值列表。
  3. 生成笛卡尔积:用所有分组的可选值列表做笛卡尔积,每个组合用+连接就是最终结果。

代码实现

import pandas as pd
import re
from itertools import product

def parse_formula(formula):
    # 匹配每个AND分组:要么是(...),要么是不含括号的连续非+字符
    groups = re.findall(r'\([^()]+\)|[^+]+', formula)
    # 处理每个分组:去括号,按/分割成列表
    option_lists = []
    for group in groups:
        # 去掉首尾的括号
        cleaned_group = group.strip('()')
        # 按/分割,去掉空字符串(避免连续/的情况)
        options = [opt.strip() for opt in cleaned_group.split('/') if opt.strip()]
        option_lists.append(options)
    # 生成笛卡尔积,每个组合用+连接
    combinations = [' + '.join(combo) for combo in product(*option_lists)]
    return combinations

# 测试示例
df = pd.DataFrame({
    'formula': [
        'ABC+(DEF/GHI/XYZ)',
        '(ABC/DEF)+(GHI/JKL)'
    ]
})

# 应用函数,展开成新的DataFrame
result_df = df['formula'].apply(parse_formula).explode().reset_index(drop=True)
print(result_df)

代码说明

  • re.findall(r'\([^()]+\)|[^+]+', formula):正则优先匹配括号包裹的内容,再匹配不含+的连续字符,完美拆分AND分组。
  • product(*option_lists):itertools的product会生成所有分组选项的笛卡尔积,正好对应AND逻辑的所有组合。
  • explode():把每个公式生成的组合列表拆成单独的行,符合你要的新数据框格式。

测试输出

运行后会得到:

0    ABC + DEF
1    ABC + GHI
2    ABC + XYZ
3    ABC + GHI
4    ABC + JKL
5    DEF + GHI
6    DEF + JKL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:45:32