![](/img/trans.png)
[英]Selective Groupby-Aggregate using Python Pandas DataFrame
[英]Dynamic creation of fieldname in pandas groupby-aggregate
我的代碼中有許多以下類型的聚合:
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øtas I. 的反饋編寫的代碼:
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"))
(我已經簡化了我的原始示例,以便更好地與添加的第二個代碼連接。)
使用 exec(),eval() 有所不同
例如:
exec(f"variable_name{added_namepart} = variable_value{added_valuepart}")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.