如何将Pandas DataFrame按指定列唯一值拆分为多个子DF或对应值列表
解决方案
两种需求都可以通过pandas原生groupby接口实现,无需手动枚举Type列的唯一值,适配大数据量场景。
方案1:生成对应名称的列表(与你示例效果完全一致)
核心逻辑是分组后对Item列聚合为列表,再转为字典,也可以直接绑定为全局变量直接调用:
import pandas as pd # 构造示例DataFrame,你实际使用时替换为自己的df即可 df = pd.DataFrame({ 'Type': ['Cars', 'Cars', 'Cars', 'Fruits', 'Fruits', 'Countries', 'Countries'], 'Item': ['Toyota', 'Honda', 'Tesla', 'Apple', 'Orange', 'USA', 'Mexico'] }) # 生成键为Type值、值为对应Item列表的字典 res_dict = df.groupby('Type')['Item'].agg(list).to_dict() # 如果需要直接生成Cars、Fruits这类命名的全局变量,执行以下代码即可 for name, item_list in res_dict.items(): globals()[name] = item_list
运行后你直接打印Cars就可以得到输出['Toyota', 'Honda', 'Tesla']。
方案2:按Type拆分为独立子DataFrame
核心逻辑是分组后直接把每个分组的DataFrame存入字典:
# 生成键为Type值、值为对应子DataFrame的字典 df_dict = dict(tuple(df.groupby('Type'))) # 如果需要直接生成对应命名的全局子DataFrame,执行以下代码 for name, sub_df in df_dict.items(): globals()[name] = sub_df
运行后你访问Cars就会得到Type为Cars的所有行组成的子DataFrame。
性能说明
pandas的groupby本身做了底层优化,即使是百万级以上的数据集也可以高效处理,不需要手动逐行遍历。
内容的提问来源于stack exchange,提问作者markovv.sim
相关产品推荐
相关产品推荐

