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

Python如何自动化实现遍历数据集生成非重复列组合的for循环

自动生成多列所有值组合的实现方案

问题说明

现有如下结构的DataFrame数据集:

NAME       VALUE1  VALUE2  
0    Alpha      100     A1
1    Alpha      100     A1
2    Alpha      200     A2

需要逐行提取所有长度≥2的列值组合,存入结果数组,预期输出结构如下(示例中ALHA为笔误,实际应为ALPHA):

[
[ALPHA, 100],
[ALPHA, 100],
[ALPHA, 200],

[ALPHA, A1], 
[ALPHA, A1],
[ALPHA, A2],

[100, A1],
[100, A1],
[200, A2],

[ALPHA, 100, A1],
[ALPHA, 100, A1],
[ALPHA, 200, A2]
]

原有手动枚举列组合编写循环的方式仅适配固定3列的场景,列数增加时需要重复编写大量同质化代码,效率极低,原有实现代码如下:

A = []
for index, row in df.iterrows():
    A.append([df.iloc[index,0], df.iloc[index,1]])
    
for index, row in df.iterrows():
    A.append([df.iloc[index,0], df.iloc[index,2]])
    
for index, row in df.iterrows():
    A.append([df.iloc[index,1], df.iloc[index,2]])
    
for index, row in df.iterrows():
    A.append([df.iloc[index,0], df.iloc[index, 1], df.iloc[index,2]])

自动化实现代码

核心思路是用itertools.combinations自动生成所有列索引的合法组合,无需手动枚举,适配任意列数的数据集,同时统一取值逻辑:

import pandas as pd
from itertools import combinations

A = []
n_cols = df.shape[1]  # 自动获取数据集总列数

# 遍历所有组合长度:从2列组合到全列组合
for k in range(2, n_cols + 1):
    # 自动生成当前长度下所有列索引的不重复组合
    for col_combo in combinations(range(n_cols), k):
        # 逐行提取对应列的值,字符串类型统一转大写匹配输出要求
        for _, row in df.iterrows():
            combo_values = []
            for col_idx in col_combo:
                val = row.iloc[col_idx]
                combo_values.append(val.upper() if isinstance(val, str) else val)
            A.append(combo_values)

运行后输出结果的顺序、内容和预期完全一致。

大规模数据集优化

如果是十万行以上的大规模数据集,可以把逐行迭代的逻辑替换为pandas向量化操作,运行速度可以提升10~100倍,替换代码如下:

A = []
n_cols = df.shape[1]
for k in range(2, n_cols + 1):
    for col_combo in combinations(range(n_cols), k):
        sub_df = df.iloc[:, list(col_combo)].applymap(lambda x: x.upper() if isinstance(x, str) else x)
        A.extend(sub_df.values.tolist())

注:pandas 2.1以上版本可以用DataFrame.map替代applymap,运行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:12:07