如何结合Pandas Groupby与Itertools Product生成分组参数组合
问题分析与解决
你的代码核心问题是lambda函数里误用了全局的df,而非分组后的子数据集x:每轮分组执行时,你都用了整个DataFrame的param1/param2/param3生成笛卡尔积,而非当前生产线对应的参数集合,这才导致行数远超预期。
修正后的代码
import pandas as pd from itertools import product # 示例原始DataFrame结构参考: # line param1 param2 param3 # 0 1 a x m # 1 1 b y n # 2 2 c p q # 3 2 d r s result = df.groupby('line').apply( lambda x: pd.DataFrame( data=list(product(x['param1'], x['param2'], x['param3'])), columns=['param1', 'param2', 'param3'] ) ).reset_index(level=1, drop=True).reset_index()
关键改动说明
- 将
df['param1']替换为x['param1']:x是groupby后对应单条生产线的子DataFrame,确保只使用当前生产线的参数生成组合 reset_index(level=1, drop=True):先移除分组内的临时索引,再重置索引得到结构整洁的最终结果
执行后,每条生产线会基于自身参数生成len(param1)*len(param2)*len(param3)个组合(比如每个参数各2个值时,单条生产线生成8种),两条生产线总计16行,完全匹配需求。
内容的提问来源于stack exchange,提问作者Me9217419274
相关产品推荐
相关产品推荐

