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

如何从DataFrame单元格提取列表并生成组合新行?

解决DataFrame中列表单元格的笛卡尔积展开问题

核心思路

不用递归,把所有单元格统一转成列表(非列表元素包装成单元素列表),再用itertools.product生成每行所有列表元素的笛卡尔积,最后重新构建DataFrame即可。

代码实现

首先构造示例数据:

import pandas as pd
import itertools

# 构造你提供的示例DataFrame
df = pd.DataFrame({
    'col1': [['a','b'], 'not a list', 'not a list'],
    'col2': ['not a list', ['@', '$'], 'not a list'],
    'col3': [[1,2,3], 'not a list', 'not a list']
})

然后定义辅助函数统一处理元素:

# 把非列表元素转成单元素列表,列表则保持原样
def to_list(x):
    return x if isinstance(x, list) else [x]

最后遍历每行生成展开后的行:

expanded_rows = []
for _, row in df.iterrows():
    # 将当前行的每一列都转成列表格式
    column_lists = [to_list(row[col]) for col in df.columns]
    # 生成所有列列表元素的笛卡尔积组合
    for combo in itertools.product(*column_lists):
        expanded_rows.append(combo)

# 转换为目标DataFrame
result_df = pd.DataFrame(expanded_rows, columns=df.columns)

运行后得到的result_df就是你要的目标格式:

col1col2col3
anot a list1
anot a list2
anot a list3
bnot a list1
bnot a list2
bnot a list3
not a list@not a list
not a list$not a list
not a listnot a listnot a list

说明

这个方法不管一行里有0个、1个还是多个列表,都能正确生成所有可能的组合,逻辑简单直接,比递归更易理解和维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:53:28