如何优化Python中遍历DataFrame列组合的嵌套for循环?
使用pandas groupby替代嵌套循环优化DataFrame分组处理
你当前的嵌套循环逻辑可以通过pandas的groupby功能完全简化,无需手动遍历唯一值和多层筛选数据。以下是两种高效实现方式:
方式1:直接遍历分组结果
通过groupby(['Temperature', 'Device', 'Coordinate'])一次性按三个维度分组,直接遍历每个分组即可完成原逻辑:
from pandas import DataFrame df = DataFrame([[30, 'DEV1', 'X4Y4', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]], [30, 'DEV1', 'X5Y5', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]], [30, 'DEV2', 'X4Y4', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]], [30, 'DEV2', 'X5Y5', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]], [85, 'DEV1', 'X4Y4', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]], [85, 'DEV1', 'X5Y5', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]], [85, 'DEV2', 'X4Y5', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]], [85, 'DEV2', 'X5Y5', [0, 1, 2, 3], [1E-5, 2E-5, 3E-5, 4E-5]]], columns=['Temperature', 'Device', 'Coordinate', 'Voltage', 'Current']) # 按三个维度分组 groups = df.groupby(['Temperature', 'Device', 'Coordinate']) # 遍历每个分组,参数为(分组键元组, 分组对应的DataFrame) for (temp, device, coord), group_df in groups: # 原逻辑中每个分组仅一行,直接提取Voltage和Current voltage = group_df['Voltage'].iloc[0] current = group_df['Current'].iloc[0] # 这里替换为你的业务处理逻辑 print(f"处理组合: 温度={temp}, 设备={device}, 坐标={coord}") print(f"电压数据: {voltage}, 电流数据: {current}\n")
方式2:用apply批量处理分组
如果你的处理逻辑可复用,可封装成函数,通过apply批量处理所有分组并返回结构化结果:
import pandas as pd def process_single_group(group): # 提取当前分组的核心数据 voltage = group['Voltage'].iloc[0] current = group['Current'].iloc[0] # 示例处理:计算电压电流比值列表 vi_ratio = [v/c for v, c in zip(voltage, current)] # 返回需要的结果字段 return { 'Temperature': group['Temperature'].iloc[0], 'Device': group['Device'].iloc[0], 'Coordinate': group['Coordinate'].iloc[0], 'V/I Ratio': vi_ratio } # 应用函数到所有分组,转换为DataFrame result_df = groups.apply(process_single_group).apply(pd.Series) print(result_df)
优势对比
- 代码简洁:一行
groupby替代三层嵌套循环和多次筛选,逻辑更直观 - 性能更优:pandas的
groupby内部经过C级优化,数据量越大,比手动循环的效率提升越明显 - 可维护性强:分组逻辑和业务处理分离,后续修改维度或处理逻辑更方便
内容的提问来源于stack exchange,提问作者MauroL
相关产品推荐
相关产品推荐

