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

pandas中如何生成指定长度m的可变列名组合列表

实现方案

需求描述

需要编写入参为Pandas DataFrame和整数m的函数,自动提取DataFrame的所有列名,生成每m个列名为一组的不重复组合,最终返回存储所有组合的嵌套列表。
以测试DataFrame为例:

import pandas as pd
df = pd.DataFrame({"ID" : [1, 2, 3, 4], 
                  "age": [46, 48, 55, 55],
                  "gender": ['female', 'female', 'male', 'male'],
                  "overweight": ['y', 'n', 'y', 'y']},
                  index = [0, 1, 2, 3])     

当m=2时,预期输出为:
[['ID', 'age'],['ID', 'gender'],['ID', 'overweight'],['age', 'gender'], ['age', 'overweight'], ['gender', 'overweight']]
要求支持动态列数的DataFrame、动态合法取值的m。

具体实现

直接使用Python标准库itertools.combinations即可,该方法天生用于生成无重复、无顺序的元素组合,不需要手动编写遍历去重逻辑,适配任意列数、任意合法m值的场景。
完整代码如下:

from itertools import combinations
import pandas as pd

def get_column_combinations(df: pd.DataFrame, m: int) -> list:
    cols = df.columns.tolist()
    col_total = len(cols)
    # 增加参数合法性校验,避免非法m值报错
    if not isinstance(m, int) or m < 1 or m > col_total:
        raise ValueError(f"m必须是1到{col_total}之间的整数,当前传入值不合法")
    # 生成组合并转为嵌套列表格式返回
    return [list(item) for item in combinations(cols, m)]

效果验证

调用函数传入示例df和m=2:

print(get_column_combinations(df, m=2))

运行输出与预期完全一致:

[['ID', 'age'], ['ID', 'gender'], ['ID', 'overweight'], ['age', 'gender'], ['age', 'overweight'], ['gender', 'overweight']]
  • 当m=1时,会返回[['ID'], ['age'], ['gender'], ['overweight']]
  • 当m等于DataFrame总列数时,会返回仅包含全列名组合的单元素列表
  • 所有组合不会出现重复分组(例如不会同时存在['ID','age']和['age','ID']的重复项)

内容的提问来源于stack exchange,提问作者peter.bucher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:01:28