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

给定约束条件下如何查找pandas DataFrame的有效元素组合

解决方案

核心逻辑

该需求本质是枚举所有从m行中取n个不重复行的排列,排列的顺序对应n个列的顺序,保证每个组合里的元素既不同行也不同列,且长度等于列数n。

实现代码

import pandas as pd
from itertools import permutations

def get_valid_combinations(df: pd.DataFrame) -> list[tuple]:
    n_cols = df.shape[1]
    n_rows = df.shape[0]
    valid_combs = []
    # 生成长度为n_cols的行索引排列,天然保证行不重复
    for row_seq in permutations(range(n_rows), n_cols):
        # 按列顺序取对应行的元素,天然保证列不重复
        current_comb = tuple(df.iloc[row_idx, col_idx] for col_idx, row_idx in enumerate(row_seq))
        valid_combs.append(current_comb)
    return valid_combs

示例验证

以你给出的3*2大小的DataFrame为例:

# 构造示例DataFrame
df = pd.DataFrame([
    [1, 2],
    [3, 4],
    [5, 6]
])
print(get_valid_combinations(df))

输出结果为:

[(1, 4), (1, 6), (3, 2), (3, 6), (5, 2), (5, 4)]

和你给出的示例规则完全匹配:(1,4)为有效组合,同列的(1,3)、同行的(1,2)均不在结果中。

扩展说明

  • 如果需要获取元素的坐标而非值,只需将df.iloc[row_idx, col_idx]替换为(row_idx, col_idx)即可
  • 当行数m小于列数n时,函数会自动返回空列表,符合无解的实际逻辑
  • 该方法不受DataFrame自定义行名/列名的影响,全程使用位置索引取值,兼容性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:45:04