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

如何根据dff每行的列名组合自动从df批量提取生成子DataFrame

Pandas 批量按列名组合提取子DataFrame实现方法

初始构造代码

以下是测试数据的构造逻辑:

import pandas as pd

A = [[1, 4, 15, 12, 42, 56, 71, 94, 50,],
[-5, 82, 93, -54, 85, 96, -57, 88, 99],
[21, 32, 43, -51, 8, 92, -53, 84, 95],
[5, 9, 10, -59, 88, 97, -56, 85, 94],
[6, 9, 6, -54, 83, 92, -51, 89, 98],
[12, 5, 19, -59, 82, 91, -55, 68, 29]]

names = [_ for _ in 'lmnopqrst']
df = pd.DataFrame(A, columns=names)

d = ['l', 'm', 'n']
f = ['o', 'p', 'q']
g = ['r', 's', 't']

dff = []
for i in list(d):
    for j in list(f):
        for k in list(g):
           dff.append((i,j,k))
dff = pd.DataFrame(dff)

需求说明:df是列名从l到t的数值型基础表,dff是三组列名做笛卡尔积生成的列名组合表,共27组三列组合。需要自动遍历每一组列名,从df中提取对应列生成独立子DataFrame,无需手动逐一定义。

实现方案

方案1:字典存储子表(最推荐)

用字典统一存储所有生成的子表,以列名拼接的字符串作为键,后续可以直接按键名调用对应子表,管理和检索都很方便:

sub_dfs = {}
for _, col_group in dff.iterrows():
    cols = col_group.tolist()
    # 键名用下划线连接三个列名,比如l_o_r对应第一组三列
    sub_dfs["_".join(cols)] = df[cols].copy()

调用示例:需要取l、p、t三列的子表时,直接访问sub_dfs["l_p_t"]即可。

方案2:列表按顺序存储子表

如果不需要按名称检索,只需要按组合生成顺序存储,直接用列表追加即可:

sub_dfs_list = []
for _, col_group in dff.iterrows():
    sub_dfs_list.append(df[col_group.tolist()].copy())

调用示例:第一组列组合对应的子表为sub_dfs_list[0],按索引顺序取用即可。

注意事项

  • 提取子表时建议追加.copy(),避免后续修改子表数据时连带改动原始df的内容
  • 不建议用动态赋值的方式给每个子表生成独立的全局变量,大量零散变量后续维护、遍历的成本极高,用字典或列表统一存储是更规范的工程化写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:09:17