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

如何通过循环按列表元素筛选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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:17:37