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

如何将列组合生成的Pandas DataFrame行转为列表或数组

Pandas列组合遍历生成行列表实现方案

基础上下文

初始样例数据与已有遍历逻辑如下:

import pandas as pd
import itertools

df = pd.DataFrame({
    'NAME': ['Alpha', 'Alpha', 'Alpha'],
    'VALUE1': [100, 100, 200],
    'VALUE2': ['A1', 'A1', 'A2']
})

# 现有逻辑:遍历列数从2到总列数的所有列组合,打印子数据集
for r in range(2, len(df.columns)+1):
    for cols in itertools.combinations(df.columns, r):
        print(df[list(cols)])

目标是将每个子数据集的每一行转换为列表,最终得到嵌套列表结构的结果。

两种思路的具体实现

方法1:转NumPy数组实现(高性能,推荐)

先将DataFrame转为NumPy数组,直接通过列索引切片取数,避免反复生成子DataFrame的额外开销,不需要额外做展平操作:

result = []
# 转numpy数组,提前生成列索引列表
data_arr = df.to_numpy()
col_indexes = list(range(len(df.columns)))

for r in range(2, len(col_indexes)+1):
    # 遍历列索引的所有组合
    for idx_combo in itertools.combinations(col_indexes, r):
        # 取出对应列的所有行,逐行转列表追加
        for row in data_arr[:, idx_combo]:
            result.append(row.tolist())

如果数据集规模较大(十万行以上),这个方法的运行速度会比逐行操作DataFrame快5~10倍。

方法2:逐行转换子DataFrame(易读易写)

如果数据量不大,直接在原有循环逻辑上扩展即可,写法直白不需要额外理解NumPy索引逻辑:

result = []
for r in range(2, len(df.columns)+1):
    for cols in itertools.combinations(df.columns, r):
        sub_df = df[list(cols)]
        # 逐行遍历子DataFrame,转列表追加
        for _, row in sub_df.iterrows():
            result.append(row.tolist())

匹配示例输出的去重处理

你给出的期望结果中对重复行做了去重(例如三列组合的子数据集有2行完全一致的['Alpha', 100, 'A1'],期望结果仅保留1条),如果需要完全匹配示例结构,追加时加去重逻辑即可:

result = []
seen_rows = set() # 用集合存储已出现的行(列表不可哈希,存元组)
data_arr = df.to_numpy()
col_indexes = list(range(len(df.columns)))

for r in range(2, len(col_indexes)+1):
    for idx_combo in itertools.combinations(col_indexes, r):
        for row in data_arr[:, idx_combo]:
            row_tuple = tuple(row.tolist())
            if row_tuple not in seen_rows:
                seen_rows.add(row_tuple)
                result.append(list(row_tuple))

运行后输出结果:

[
    ['Alpha', 100], ['Alpha', 200],
    ['Alpha', 'A1'], ['Alpha', 'A2'],
    [100, 'A1'], [200, 'A2'],
    ['Alpha', 100, 'A1'], ['Alpha', 200, 'A2']
]

如果不需要去重,去掉上述判断逻辑即可保留所有原始行。

内容的提问来源于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 06:36:16