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

如何在Python中按id_number遍历DataFrame分组后的行数据

问题描述

我有如下结构的pandas DataFrame:

,id_number,x,y
0,000002,20,30
0,000002,30,30
0,000002,20,25
0,000002,10,3
1,000003,30,40
1,000003,40,50
1,000003,60,70
1,000003,70,78
....

每个id_number对应多条行数据,需求是遍历所有id_number,对每个id_number对应的行执行操作,伪代码如下:

for all id_numbers
   operate on the rows that have that id_number

请问如何用Python实现?

解决方案

在pandas中可以通过groupby方法快速实现按ID分组处理,以下是两种常用实现方式:

方式一:直接遍历分组对象

先按id_number完成分组,再遍历每个分组的ID和对应的子DataFrame,直接对数据执行操作:

import pandas as pd

# 加载你的DataFrame(示例用csv加载,可替换为实际数据来源)
df = pd.read_csv('your_data_source.csv')

# 按id_number分组
grouped_data = df.groupby('id_number')

# 遍历每个分组
for id_num, sub_df in grouped_data:
    # 这里编写针对当前ID对应数据的操作逻辑
    print(f"正在处理ID: {id_num}")
    # 示例操作:计算x列的最大值和y列的最小值
    x_max = sub_df['x'].max()
    y_min = sub_df['y'].min()
    print(f"该ID下x的最大值: {x_max}, y的最小值: {y_min}\n")

方式二:用apply批量执行封装好的操作

如果你的处理逻辑可以封装成函数,使用apply会更简洁,它会自动将每个分组传入函数处理:

def process_single_group(sub_df):
    # 定义针对单个分组的处理逻辑
    stats = {
        'id': sub_df['id_number'].iloc[0],
        'x_avg': sub_df['x'].mean(),
        'y_total': sub_df['y'].sum(),
        'row_count': len(sub_df)
    }
    return pd.Series(stats)

# 应用函数到所有分组,得到汇总结果
processed_result = grouped_data.apply(process_single_group).reset_index(drop=True)
print(processed_result)

注意事项

  • 示例中id_number是字符串格式(如000002),groupby会保留其原始格式,不会因为类型转换丢失前导零。
  • 数据量较大时,优先使用apply或pandas向量化操作,比手动遍历效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:55:23