簡體   English   中英

在pandas groupby-aggregate中動態創建字段名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM