如何通过循环按列表元素筛选Pandas DataFrame数据?
需求说明
我有如下DataFrame:
import pandas as pd # 修正原代码语法错误
创建示例DataFrame
df = pd.DataFrame({ 'material_sub_category_id': [8038, 10063, 8038, 9539], 'auction_id': [400, 401, 402, 403], 'material_name': ['pig iron', 'sponge iron', 'pig iron' , 'billet'], 'auc_rule': ['yankee', 'english no tie', 'yankee', 'english no tie'], 'h1_price': [27200, 24678, 27800, 34000] })
我已生成子分类ID的唯一值列表:
subcat_list = df['material_sub_category_id'].unique().tolist() # 输出结果为 [8038, 10063, 9539](注:原示例列表中的9627在DataFrame中不存在,推测为笔误)
我已经手动完成单个子分类的筛选,结果如下:
df_8038 material_sub_category_id | auction_id | material_name | auc_rule | h1_price 8038 400 'pig iron' 'yankee' 27200 8038 402 'pig iron' 'yankee' 27800
现在希望通过循环,为每个material_sub_category_id筛选出对应的DataFrame数据。
解决方案
方法1:用字典存储(推荐)
用字典存放各子分类的DataFrame,既方便管理,又不会污染全局命名空间:
subcat_dfs = {} for subcat_id in subcat_list: subcat_dfs[f'df_{subcat_id}'] = df[df['material_sub_category_id'] == subcat_id] # 调用示例:获取ID为8038的DataFrame print(subcat_dfs['df_8038'])
方法2:动态创建全局变量(不推荐)
如果一定要生成df_8038这类独立变量,可通过globals()实现,但该方式不利于代码维护:
for subcat_id in subcat_list: globals()[f'df_{subcat_id}'] = df[df['material_sub_category_id'] == subcat_id] # 直接调用变量即可 print(df_8038)
补充:更简洁的分组方式
无需手动生成subcat_list,直接用groupby批量处理:
# 按子分类ID分组 grouped = df.groupby('material_sub_category_id') # 遍历分组并存储到字典 subcat_dfs = {} for subcat_id, group_df in grouped: subcat_dfs[f'df_{subcat_id}'] = group_df
内容的提问来源于stack exchange,提问作者Ami
相关产品推荐
相关产品推荐

