如何在Pandas groupby中用lambda适配任意变量列表
适配任意变量列表的分组聚合代码优化
你当前的代码通过硬编码变量名实现分组聚合,要适配任意variables_to_used列表,只需要修改lambda函数,利用DataFrame的列迭代能力自动处理所有指定变量,不用显式写每个变量名。
修改后的代码方案1(利用转置遍历列)
import pandas as pd variables_to_used = ['Var1','Var2','Var3'] result = df.groupby('ZipCode')[variables_to_used].apply( lambda x: [list(col) for col in x.T] ).apply(pd.Series).to_numpy()
修改后的代码方案2(直接遍历列项)
result = df.groupby('ZipCode')[variables_to_used].apply( lambda x: [list(values) for _, values in x.iteritems()] ).apply(pd.Series).to_numpy()
原理说明
- 方案1中,
x.T将分组后的DataFrame转置,原来的每一列变成转置后的一行,遍历转置后的行就能依次获取每个变量的所有值,转成列表即可。 - 方案2使用
x.iteritems()直接迭代分组后DataFrame的列(返回(列名, 列值Series)的元组),只提取列值转成列表,逻辑更直观。
两种方案都能完全适配任意长度的variables_to_used列表,不管你后续新增或修改变量名,都不需要改动lambda函数里的内容,输出结构和原代码保持一致。
内容的提问来源于stack exchange,提问作者user150272
相关产品推荐
相关产品推荐

