如何通过循环批量生成DataFrame的指定列组合子集?
嗨,我来帮你解决这个用循环批量生成DataFrame的问题!先理清楚需求和实现方案:
基础DataFrame
首先我们有这个初始的DataFrame(记得先导入依赖库哦):
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(0,10,size=(100,6)),columns = ['red','blue','yellow','green','purple','total'])
需求说明
你需要实现的核心逻辑是:从原DataFrame中提取某一列和最后一列(total,索引为5),生成多个新的DataFrame,手动写会是这样:
df_red = df[df.columns[[0,5]]] df_blue = df[df.columns[[1,5]]] df_yellow = df[df.columns[[2,5]]] df_green = df[df.columns[[3,5]]] df_purple = df[df.columns[[4,5]]]
但你希望用循环自动完成,避免手动重复代码,尤其是当列数更多时更高效。
循环实现方案
这里有两种实用的方式,推荐第一种更规范的写法:
方式1:用字典存储生成的DataFrame(推荐)
用字典统一管理这些新的DataFrame是Python中的最佳实践,既整洁又方便后续批量操作:
# 获取除了total列之外的所有颜色列名 color_columns = df.columns[:-1] # 创建空字典来存放结果 df_collection = {} # 遍历每个颜色列,生成对应的DataFrame并存入字典 for col_name in color_columns: # 直接用列名索引比用数字索引更直观,可读性更强 df_collection[f'df_{col_name}'] = df[[col_name, 'total']] # 后续可以通过字典键访问对应的DataFrame,比如查看df_red的前几行 print(df_collection['df_red'].head())
方式2:动态创建独立变量(不推荐,仅作了解)
如果你确实需要单独的全局变量(比如df_red、df_blue),可以用globals()动态创建,但这种方式在复杂项目中容易导致变量混乱,不利于维护:
color_columns = df.columns[:-1] for col_name in color_columns: # 动态创建全局变量 globals()[f'df_{col_name}'] = df[[col_name, 'total']] # 现在可以直接使用这些变量 print(df_blue.head())
小提示
用字典存储的方式优势很明显:比如你后续要把所有生成的DataFrame导出为CSV文件,只需要再循环一次字典即可,不需要逐个处理变量,大大提升效率。
内容的提问来源于stack exchange,提问作者Si_CPyR
相关产品推荐
相关产品推荐

