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

Python中如何用循环筛选DataFrame、执行计算并生成汇总新表

实现方案

你这个需求本质是按指定列分组后对每组执行自定义计算,最后合并结果,直接用pandas的groupby功能就能高效实现,不需要手动逐个筛选索引值。

标准方案(推荐)

1. 准备数据

import pandas as pd
import numpy as np

# 构造和示例结构一致的测试数据,如果你已有数据可跳过这步
df = pd.DataFrame({
    'id': [1,1,1,2,2,2,3,3,3],
    'col1': [10,20,30,15,25,35,12,22,32],
    'col2': [4,5,6,7,8,9,1,2,3]
})

# 如果你说的索引列是DataFrame默认行索引,先转成普通列再分组
# df = df.reset_index(names='id')

2. 定义分组计算逻辑

你可以把任意要对单组执行的计算逻辑写在函数里:

def custom_calc(group_df):
    # 下方为示例计算逻辑,可替换为你自己的规则
    return pd.Series({
        'id': group_df['id'].iloc[0],
        'col1_sum': group_df['col1'].sum(),
        'col2_avg': group_df['col2'].mean(),
        'custom_metric': group_df['col1'].max() * group_df['col2'].min()
    })

3. 分组计算得到汇总表

summary_df = df.groupby('id', as_index=False).apply(custom_calc, include_groups=False).reset_index(drop=True)

手动循环实现(不推荐,仅做参考)

如果确实需要手动控制筛选流程,也可以遍历所有唯一索引值实现:

unique_ids = df['id'].unique()
res_list = []

for id_val in unique_ids:
    # 筛选当前索引值对应的行
    sub_df = df[df['id'] == id_val]
    # 执行自定义计算
    res = {
        'id': id_val,
        'col1_sum': sub_df['col1'].sum(),
        'col2_avg': sub_df['col2'].mean()
    }
    res_list.append(res)

# 合并结果为汇总表
summary_df = pd.DataFrame(res_list)

注意事项

  • 如果要对分组做更复杂的操作比如整组变换、按规则过滤分组,groupby也支持transform、filter方法,按需调用即可
  • include_groups=False是pandas 2.2及以上版本的参数,如果你用的是更早的版本,删除该参数即可,不会影响计算结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:27:01