我的代码中有以下类型的许多聚合:
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”全部创建为变量输入,并根据我使用的过程进行选择。 m正在执行。这将大大减少需要编写的代码量,并且更新也将更易于管理,因为否则我需要为上述每种组合编写单独的,否则相同的代码。
我可以使用eval来做到这一点吗?我会很乐意提供指导。谢谢。
添加VaidøtasI.反馈后编写的代码:
index = ['PA']
lvl = 'pa'
fname = lvl+"_pop"
b = f'dfdom.groupby({index}).agg({lvl}_pop = ("dom_pop", "sum"))'
dfpab = exec(b)
以上内容的输出是“ NoneType对象”。如果我将变量b中的文本抬起并直接运行如下所示的代码,则会得到一个数据框。
dfpab = dfdom.groupby(['PA']).agg(pa_pop = ("dom_pop", "sum"))
(我简化了原始示例,以更好地与添加的第二个代码联系起来。)
答案 0 :(得分:0)
使用exec(),eval()有所不同
例如:
exec(f"variable_name{added_namepart} = variable_value{added_valuepart}")