我的代码中有许多以下类型的聚合:
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"))
(我简化了我的原始示例,以便更好地连接添加的第二个代码。)
使用exec(),eval()是另一回事
例如:
相关问题 更多 >
编程相关推荐