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

如何使用Pandas按列名中的'dummy{i}'字符串高效拆分含3000列的大型数据集

批量生成dummy分组子数据集的高效方案

完全懂你的痛点——手动写40行重复代码不仅繁琐,还容易出错。这里有几个高效且兼顾内存的方案,帮你一次性搞定所有分组:

推荐方案:用字典统一管理所有分组

最整洁且易维护的方式是把所有子数据集存入一个字典,避免创建一堆零散的变量。结合循环和f-string就能轻松实现:

# 初始化空字典存储所有分组
dummy_groups = {}

# 遍历dummy0到dummy39(共40组)
for i in range(40):
    # 构造当前分组的后缀
    target_suffix = f"dummy{i}"
    # 用向量化方法筛选列(比列表推导式更高效)
    selected_cols = df.columns[df.columns.str.contains(target_suffix)]
    # 提取子数据集并存入字典,键名用group_0、group_1...命名
    dummy_groups[f"group_{i}"] = df[selected_cols]

为什么这个方案好?

  • 代码效率:用df.columns.str.contains()替代列表推导式,是pandas的向量化操作,处理3000列的速度更快。
  • 内存效率:pandas默认会返回原数据的视图(而非立即复制整个子数据集),只有当你修改分组数据时才会触发复制,大大节省内存。
  • 易维护:所有分组都存在一个字典里,后续访问只需用dummy_groups["group_5"]这种方式,不用找一堆零散变量。

可选:生成单独变量(不推荐)

如果你确实需要单独的group_0、group_1等变量,可以用globals()动态创建,但这种方式会让全局变量变得杂乱,不建议大规模使用:

for i in range(40):
    target_suffix = f"dummy{i}"
    selected_cols = df.columns[df.columns.str.contains(target_suffix)]
    # 动态创建全局变量
    globals()[f"group_{i}"] = df[selected_cols]

额外优化:提前提取后缀避免重复计算

如果你的列名格式非常固定(都是xxx_dummyn),还可以先提取每个列的后缀,再按后缀分组,效率会更高:

# 提取每个列的dummy后缀(比如'abc_dummy0'→'dummy0')
col_suffixes = df.columns.str.split("_").str[-1]
# 按后缀分组,直接得到每个dummy对应的子数据集
dummy_groups = {suffix: df[col_suffixes == suffix] for suffix in col_suffixes.unique()}

这种方式直接利用pandas的分组能力,省去了循环里的重复筛选,适合列名格式严格统一的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:12:48