基于列唯一值从现有Pandas DataFrame动态创建新DataFrame
按指定列值动态生成多个DataFrame的实用方案
前阵子做特征工程的时候碰到个麻烦:数据集里有大量特征需要做向量化,后续还要套各种处理函数,但手动复制DataFrame、筛选不同分组再逐一处理的方式太蠢了——我想直接根据某列(比如我的数据里的Column B)的不同取值,自动生成对应的新DataFrame,比如df_A、df_B、df_C这类。
试了两种方法都翻车了:
- 一开始想用字典存储,结果运行
dict_of_df[key_name] = copy.deepcopy(df)时直接炸了,报TypeError: unhashable type: 'numpy.ndarray',查了才知道是用来当key的变量类型不对,没法被哈希; - 自己瞎写的逻辑更离谱,直接抛出
ValueError: Wrong number of items passed 2, placement implies 1,折腾半天没搞明白哪里错。
后来在社区里看到@jezrael分享的方法,一下子就搞定了!核心代码特别简洁,利用groupby配合globals()动态创建变量:
for i, x in df.groupby('Column B'): globals()['dataframe' + i] = x
这段代码会自动遍历Column B里的每一个唯一值,把它当成后缀拼在dataframe后面生成新的DataFrame变量,比如Column B里有'A'、'B'、'C'的话,就会自动生成dataframeA、dataframeB、dataframeC,每个变量对应的就是原数据中Column B取值为对应值的子集,完全不用手动写筛选条件,省了大把重复劳动!
内容的提问来源于stack exchange,提问作者June
相关产品推荐
相关产品推荐

