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

如何用df.loc自动过滤DataFrame并遍历所有实例子集运行代码?

实现自动遍历实例子集并批量运行实验的方案

核心思路

  1. 用itertools生成所有非空实例子集(跳过空集,避免无数据的无效实验)
  2. 遍历每个子集,用df.loc结合isin()快速过滤目标数据
  3. 将实验逻辑封装为独立函数,批量调用执行并留存结果

完整代码实现

import pandas as pd
import itertools

# 示例DataFrame(替换成你的实际数据)
df = pd.DataFrame({
    'Instance': ['A', 'A', 'B', 'C', 'C', 'D', 'D', 'D'],
    'Metric': [12, 18, 22, 27, 33, 38, 42, 47]
})

instance_list = ['A', 'B', 'C', 'D']

# 生成所有非空子集
def get_non_empty_subsets(items):
    subsets = []
    # 生成长度1到len(items)的所有组合
    for length in range(1, len(items)+1):
        subsets.extend(itertools.combinations(items, length))
    # 转成列表格式(可选,根据你的习惯调整)
    return [list(sub) for sub in subsets]

non_empty_subsets = get_non_empty_subsets(instance_list)

# 封装你的实验逻辑
def run_experiment(filtered_data, target_subset):
    """替换为你的实际实验代码"""
    print(f"--- 处理子集: {target_subset} ---")
    # 示例操作:计算Metric列的均值和标准差
    metric_mean = filtered_data['Metric'].mean()
    metric_std = filtered_data['Metric'].std()
    print(f"数据量: {len(filtered_data)}, 均值: {metric_mean:.2f}, 标准差: {metric_std:.2f}")
    # 返回结果用于后续分析
    return {
        'subset': target_subset,
        'data_count': len(filtered_data),
        'metric_mean': metric_mean,
        'metric_std': metric_std
    }

# 批量执行实验并收集结果
experiment_results = []
for subset in non_empty_subsets:
    # 过滤匹配子集的行
    filtered_df = df.loc[df['Instance'].isin(subset)]
    # 跳过无匹配数据的情况(可选,根据你的数据情况调整)
    if filtered_df.empty:
        print(f"子集{subset}无匹配数据,跳过")
        continue
    # 执行实验
    result = run_experiment(filtered_df, subset)
    experiment_results.append(result)

# 可选:将结果转成DataFrame方便对比分析
results_summary = pd.DataFrame(experiment_results)
print("\n=== 所有实验结果汇总 ===")
print(results_summary)

关键细节说明

  • 子集生成:通过itertools.combinations按长度生成组合,直接跳过空集,比生成全powerset后过滤更高效
  • 数据过滤:df.loc[df['Instance'].isin(subset)]是多实例匹配的最优写法,比多个|拼接条件更简洁,性能也更优
  • 实验封装:把实验逻辑抽成独立函数,既提升代码可读性,也方便后续修改实验逻辑,无需改动遍历框架
  • 结果留存:用列表收集每个子集的实验结果,最后转成DataFrame可以快速对比不同子集的实验效果

内容的提问来源于stack exchange,提问作者Mathijsvdk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:45:20