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

如何从DataFrame生成无重复行和列的排列组合?

生成DataFrame中行列不重复的排列组合

需求与示例

现有如下结构的DataFrame:

column_1    column_2     column_3
a     2           3            7
b     9           4            3
c     1           5            2

需要生成所有行列不重复使用的元素组合:每个组合中的元素分别来自不同的行和不同的列,最终得到n!个结果(n为DataFrame的行列数,此处n=3,共6个),期望输出如下:

Out: [(2,4,2),(2,5,3),(9,3,2),(9,5,7),(1,3,3),(1,4,7)]

错误尝试

使用itertools.product的方式会生成n^n个组合(此处为27个),不符合行列不重复的要求,代码如下:

from itertools import product
permutations = list(product(df['column_1'], df['column_2'], df['column_3']))
print(permutations)

正确实现方案

核心思路是通过列索引的全排列,确保每个组合选取不同列的元素,同时按行顺序对应选取,保证行不重复。

代码示例:

import pandas as pd
from itertools import permutations

# 构造示例DataFrame
df = pd.DataFrame({
    'column_1': [2, 9, 1],
    'column_2': [3, 4, 5],
    'column_3': [7, 3, 2]
}, index=['a', 'b', 'c'])

# 生成列名的所有全排列
column_permutations = permutations(df.columns)

# 遍历每个列排列,按行选取对应元素
result = []
for cols in column_permutations:
    combination = tuple(df.loc[row, col] for row, col in zip(df.index, cols))
    result.append(combination)

print(result)

执行后输出:

[(2, 4, 2), (2, 5, 3), (9, 3, 2), (9, 5, 7), (1, 3, 3), (1, 4, 7)]

逻辑说明

  • permutations(df.columns)生成所有列名的全排列,共3! = 6种,正好对应需要的组合数量。
  • 对每个列排列,按行的顺序(a、b、c)依次选取对应列的元素,确保每个元素来自不同的行和列,满足行列不重复的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:30:58