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

如何修改Python代码生成DataFrame列的所有子集组合结果?

问题描述

现有如下DataFrame:

12  2   17
16  4   16
2   19  11

期望得到的跨列输出结果:

[ [12,16,2],[2,4,19],[17,16,11],[[12,16,2],[2,4,19]],[[2,4,19],[17,16,11]],[[12,16,2],[2,4,19],[17,16,11]]  ]

当前使用的Python代码仅能生成前3种单个列的结果:

from itertools import combinations
resultTmp2 = []
for j in range(1, len(dataframe.columns) + 1):
  resultTmp = []
  for xVal in list(combinations(dataframe.iloc[:len(dataframe) + 1,j-1],  len(dataframe)  )): 
    resultTmp.append(list(xVal)) 
  resultTmp2.append(resultTmp)
print(resultTmp2)

需要修改代码以得到预期的完整输出。


解决方案

你的需求本质是生成所有非空的列组合,每个组合对应该组合下所有列的列值列表集合。修改思路如下:

  1. 先提取DataFrame所有列的列表形式,把每一列转成独立列表
  2. 遍历从1到总列数的所有长度,生成对应长度的列组合
  3. 将每个组合按要求的结构加入结果列表

修改后的完整代码:

from itertools import combinations
import pandas as pd

# 构造示例DataFrame(如果已有可省略)
dataframe = pd.DataFrame([[12,2,17], [16,4,16], [2,19,11]])

# 提取所有列的列表形式
column_lists = [list(col) for col in dataframe.values.T]

result = []
# 遍历组合长度:1到总列数(包含)
for length in range(1, len(column_lists)+1):
    # 生成当前长度下的所有列组合
    for combo in combinations(column_lists, length):
        # 单个列直接加入列表,多列组合转成嵌套列表加入
        result.append(combo[0] if length == 1 else list(combo))

print(result)

代码说明

  • dataframe.values.T:将DataFrame转置,让原每一列变成一行,再转成列表得到所有列的集合column_lists
  • combinations(column_lists, length):生成指定长度的所有列组合,比如长度为2时,会生成([12,16,2], [2,4,19])和([2,4,19], [17,16,11])两个组合
  • 最后根据组合长度调整结构,确保输出和预期完全匹配

运行代码后即可得到你需要的完整嵌套列表结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:23:08