pandas groupbyaggregate中字段名的动态创建

2024-09-28 05:26:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码中有许多以下类型的聚合:

period = 'ag'
index = ['PA']
lvl = 'pa'
wm = lambda x: np.average(x, weights=dfdom.loc[x.index, 'pop'])
dfpa = dfdom[(dfdom['stratum_kWh'] !=8)].groupby(index).agg(
    pa_mean_ea_ag_kwh = ('mean_ea_'+period+'_kwh', wm),
    pa_pop = ('dom_pop', 'sum'))

构建聚合方程的右侧很简单。我还想动态构建聚合方程的左侧,以便“dom”、“ea”、“ag”和“kw/kwh/thm”都可以创建为变量输入,并根据我正在执行的进程使用。这将大大减少需要编写的代码量,更新也将更容易管理,否则我需要为上述每种组合编写单独的、或者完全相同的代码

我可以用eval来做这个吗?我希望你能指导我怎么做。谢谢

添加Vaidøtas I反馈后编写的代码:

index = ['PA'] 
lvl = 'pa' 
fname = lvl+"_pop" 

b = f'dfdom.groupby({index}).agg({lvl}_pop = ("dom_pop", "sum"))' 
dfpab = exec(b) 

上面的输出是“非类型对象”。如果我提升变量b中的文本并直接运行如下所示的代码,我会得到一个数据帧

dfpab = dfdom.groupby(['PA']).agg(pa_pop = ("dom_pop", "sum"))

(我简化了我的原始示例,以便更好地连接添加的第二个代码。)


Tags: 代码类型indexpopaggdomkwhsum

热门问题